Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

와일드카드

이 페이지의 내용

  • 정의
  • 구문
  • 옵션
  • 행동
  • 예시
wildcard

wildcard 연산자는 검색 문자열에 모든 문자와 일치할 수 있는 특수 문자를 사용하는 쿼리를 활성화합니다.

캐릭터
설명
?
모든 단일 문자와 일치합니다.
*
0개 이상의 문자와 일치합니다.
\
이스케이프 문자.

wildcard 는 텀 수준 연산자이므로 query 필드는 분석되지 않습니다. query 필드는 특수 문자가 포함된 단일 텀으로 취급되므로 텀 수준 연산자는 키워드 분석기에서 잘 작동합니다. 분석된 query 필드와 분석되지 않은 query 필드에 대해 쿼리하는 예는 분석된 필드 예시를 참조하세요.

wildcard 의 구문은 다음과 같습니다:

{
$search: {
"index": <index name>, // optional, defaults to "default"
"wildcard": {
"query": "<search-string>",
"path": "<field-to-search>",
"allowAnalyzedField": <boolean>,
"score": <options>
}
}
}

wildcard 는 다음 용어를 사용하여 쿼리를 구성합니다:

필드
유형
설명
필요성
기본값
query
문자열 또는 문자열 배열
검색할 문자열 또는 문자열을 입력합니다.
path
문자열 또는 문자열 배열
인덱싱된 필드 또는 검색할 필드. 검색을 위해 와일드카드 경로를 지정할 수도 있습니다. 자세한 내용은 경로 구성을 참조하세요.
allowAnalyzedField
부울
분석 필드에 대해 쿼리를 실행하는 경우true으로 설정해야 합니다.
no
false
score
객체

일치하는 검색어 결과에 부여된 점수를 수정합니다. 옵션은 다음과 같습니다.

  • boost결과 점수에 주어진 숫자를 곱합니다.

  • constant결과 점수를 주어진 숫자로 바꿉니다.

  • function: 주어진 표현식을 사용하여 결과 점수를 대체합니다.

쿼리에서 score 사용에 대한 자세한 내용은 결과에서 문서 채점하기를 참조하십시오.

no

wildcard 은(는) 용어 수준 연산자이므로 query 필드는 분석되지 않습니다. wildcard 연산자를 사용하여 allowAnalyzedField 옵션을 true로 설정하여 인덱싱 중에 분석된 필드에 대해 검색을 수행할 수 있지만, 결과에는 쿼리 텍스트가 분석되지 않은 것으로 반영됩니다.

예시

표준 분석기foo bar baz 필드를 인덱싱한다고 가정해 보겠습니다. Atlas Search는 필드를 foo, barbaz로 분석하고 인덱싱합니다. 와일드카드 연산자는 foo bar*를 끝에 와일드카드가 있는 단일 검색어로 취급하기 때문에 이 필드에서 foo bar*를 검색하면 아무것도 검색되지 않습니다. 즉, Atlas Search는 필드에서 foo bar로 시작하는 단어를 검색하지만 아무 것도 찾을 수 없습니다. 이는 용어가 존재하지 않기 때문입니다.

예시

keyword 분석기로 색인된 필드에서 *Star Trek*을 검색하면 어떤 컨텍스트에서든 필드에 문자열 Star Trek 이 포함된 모든 문서를 찾을 수 있습니다. 표준 분석기로 인덱싱된 필드에서 *Star Trek*을 검색하면 StarTrek 사이에 공백이 있고 인덱스에 공백이 포함되어 있지 않기 때문에 아무것도 찾을 수 없습니다.

mongosh 또는 드라이버와 함께 이스케이프 문자를 사용하는 경우 이스케이프할 문자 앞에 이중 백슬래시를 사용해야 합니다.

예시

집계 파이프라인에서 리터럴 별표가 포함된 문자열을 검색하는 와일드카드 표현식을 만들려면 다음 표현식을 사용하세요.

"*\\**"

첫 번째 별표와 마지막 별표는 모든 문자와 일치하는 와일드카드 역할을 하며 \\* 는 리터럴 별표와 일치합니다.

참고

리터럴 백슬래시를 이스케이프하려면 다음 표현식을 사용합니다.

"*\\\*"

언어 선택 드롭다운 메뉴를 사용하여 이 페이지에 있는 예시의 언어를 설정합니다.


다음 예시에서는 키워드 분석기를 사용하는 사용자 지정 인덱스 정의와 함께 sample_mflix 데이터베이스의 movies 컬렉션을 사용합니다. 클러스터에 샘플 데이터 세트가 있는 경우 movies 컬렉션에 Atlas Search 인덱스를 생성하고 클러스터에서 예시 쿼리를 실행할 수 있습니다.

샘플 데이터 집합을 이미 로드한 경우, Atlas Search 시작하기 자습서에 따라 인덱스 정의를 만들고 Atlas Search 쿼리를 실행하세요.

Search Tester에서 쿼리 구문을 보고 편집하려면 다음을 수행하세요.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters 클릭하세요.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3
  1. 쿼리할 인덱스 오른쪽에 있는 Query 버튼을 클릭합니다.

  2. Edit Query 을 클릭하면 JSON 형식의 기본 쿼리 구문 샘플을 볼 수 있습니다.

mongosh 프롬프트에서 다음 명령을 실행하여 sample_mflix 데이터베이스를 사용합니다.

use sample_mflix

다음 인덱스 정의는 키워드 분석기를사용하여 movies 컬렉션의 title 필드를 인덱싱합니다.

1{
2 "mappings": {
3 "fields": {
4 "title": {
5 "analyzer": "lucene.keyword",
6 "type": "string"
7 }
8 }
9 }
10}

다음은 title 필드에서 Green D로 시작하고 그 뒤로 다른 문자 여러 개가 이어지는 영화 제목을 모두 검색하는 예시입니다.

다음 쿼리를 복사하여 Query Editor에 붙여 넣은 다음 Query Editor에서 Search 버튼을 클릭합니다.

[
{
$search: {
"wildcard": {
"path": "title",
"query": "Green D*"
}
}
}
]
db.movies.aggregate([
{
"$search": {
"wildcard": {
"path": "title",
"query": "Green D*"
}
}
},
{
"$project": {
"_id": 0,
"title": 1
}
}
])

movies colection의 Aggregations 탭에서 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 각 파이프라인 단계를 구성합니다. Add Stage를 클릭하여 단계를 추가합니다.

파이프라인 단계
쿼리
$search
{
"wildcard": {
"query": "Green D*",
"path": "title"
}
}
$project
{
"_id": 0,
"title": 1,
}
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.Conventions;
using MongoDB.Driver;
using MongoDB.Driver.Search;
public class WildcardSingleCharacter
{
private const string MongoConnectionString = "<connection-string>";
public static void Main(string[] args)
{
// allow automapping of the camelCase database fields to our MovieDocument
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
// connect to your Atlas cluster
var mongoClient = new MongoClient(MongoConnectionString);
var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
// define and run pipeline
var results = moviesCollection.Aggregate()
.Search(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "Green D*"))
.Project<MovieDocument>(Builders<MovieDocument>.Projection
.Include(movie => movie.Title)
.Exclude(movie => movie.Id))
.ToList();
// print results
foreach (var movie in results)
{
Console.WriteLine(movie.ToJson());
}
}
}
[BsonIgnoreExtraElements]
public class MovieDocument
{
[BsonIgnoreIfDefault]
public ObjectId Id { get; set; }
public string Title { get; set; }
}
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// connect to your Atlas cluster
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
if err != nil {
panic(err)
}
defer client.Disconnect(context.TODO())
// set namespace
collection := client.Database("sample_mflix").Collection("movies")
// define pipeline stages
searchStage := bson.D{{"$search", bson.D{{"wildcard", bson.D{{"path", "title"}, {"query", "Green D*"}}}}}}
projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}}}}
// run pipeline
cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, projectStage})
if err != nil {
panic(err)
}
// print results
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}
}
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Aggregates.project;
import static com.mongodb.client.model.Projections.excludeId;
import static com.mongodb.client.model.Projections.fields;
import static com.mongodb.client.model.Projections.include;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class WildcardSingleCharacter {
public static void main(String[] args) {
// connect to your Atlas cluster
String uri = "<connection-string>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
// set namespace
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
// define pipeline
Document agg = new Document("query", "Green D*").append("path", "title");
// run pipeline and print results
collection.aggregate(Arrays.asList(
eq("$search", eq("wildcard", agg)),
project(fields(excludeId(), include("title"))))).forEach(doc -> System.out.println(doc.toJson()));
}
}
}
import com.mongodb.client.model.Aggregates.project
import com.mongodb.client.model.Filters.eq
import com.mongodb.client.model.Projections.*
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
import org.bson.Document
fun main() {
val uri = "<connection-string>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Document>("movies")
runBlocking {
val agg = Document("query", "Green D*").append("path", "title")
val resultsFlow = collection.aggregate<Document>(
listOf(
eq("\$search", eq("wildcard", agg)),
project(fields(
excludeId(),
include("title")
))
)
)
resultsFlow.collect { println(it) }
}
mongoClient.close()
}
const { MongoClient } = require("mongodb");
// connect to your Atlas cluster
const uri =
"<connection-string>";
const client = new MongoClient(uri);
async function run() {
try {
await client.connect();
// set namespace
const database = client.db("sample_mflix");
const coll = database.collection("movies");
// define pipeline
const agg = [
{$search: {wildcard: {query: "Green D*", path: "title"}}},
{$project: {_id: 0, title: 1}},
];
// run pipeline
const result = await coll.aggregate(agg);
// print results
await result.forEach((doc) => console.log(doc));
} finally {
await client.close();
}
}
run().catch(console.dir);
import pymongo
# connect to your Atlas cluster
client = pymongo.MongoClient('<connection-string>')
# define pipeline
pipeline = [
{"$search": {"wildcard": {"query": "Green D*", "path": "title"}}},
{"$project": {"_id": 0, "title": 1}},
]
# run pipeline
result = client["sample_mflix"]["movies"].aggregate(pipeline)
# print results
for i in result:
print(i)

위의 쿼리는 다음과 같은 결과를 반환합니다:

SCORE: 1 _id: "573a1393f29313caabcddaf5"
plot: "Sophie loved Edmund, but he left town when her parents forced her to m…"
genres: Array
runtime: 141
SCORE: 1 _id: "573a13a2f29313caabd0a4e4"
plot: "The story of some Vietnamese refugees as they first arrive at Camp Pen…"
genres: Array
runtime: 115

Search Tester는 반환하는 문서의 모든 필드를 표시하지 않을 수 있습니다. 쿼리 경로에 지정한 필드를 비롯하여 모든 필드를 보려면 결과에서 문서를 펼칩니다.

{ "title" : "Green Dolphin Street" }
{ "title" : "Green Dragon" }
{ "title" : "Green Dolphin Street" }
{ "title" : "Green Dragon" }
{ "title" : "Green Dolphin Street" }
{ "title" : "Green Dragon" }
[{title Green Dolphin Street}]
[{title Green Dragon}]
{"title": "Green Dolphin Street"}
{"title": "Green Dragon"}
Document{{title=Green Dolphin Street}}
Document{{title=Green Dragon}}
{ title: 'Green Dolphin Street' }
{ title: 'Green Dragon' }
{'title': 'Green Dolphin Street'}
{'title': 'Green Dragon'}

다음 예에서는 문자열 title(여기서 Wom?n은(는) 단일 문자일 수 있음)로 시작하고 그 뒤에 공백 한 칸이 있고, 뒤이어 다른 문자 여러 개가 이어지는 영화 제목을 모든 ? 필드에서 검색합니다.

다음 쿼리를 복사하여 Query Editor에 붙여 넣은 다음 Query Editor에서 Search 버튼을 클릭합니다.

[
{
$search: {
"wildcard": {
"path": "title",
"query": "Wom?n *"
}
}
}
]

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

db.movies.aggregate([
{
"$search": {
"wildcard": {
"path": "title",
"query": "Wom?n *"
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"title": 1
}
}
])

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

movies colection의 Aggregations 탭에서 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 각 파이프라인 단계를 구성합니다. Add Stage를 클릭하여 단계를 추가합니다.

파이프라인 단계
쿼리
$search
{
"wildcard": {
"query": "Wom?n *",
"path": "title"
}
}
$limit
5
$project
{
"_id": 0,
"title": 1,
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.Conventions;
using MongoDB.Driver;
using MongoDB.Driver.Search;
public class WildcardMultipleCharacter
{
private const string MongoConnectionString = "<connection-string>";
public static void Main(string[] args)
{
// allow automapping of the camelCase database fields to our MovieDocument
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
// connect to your Atlas cluster
var mongoClient = new MongoClient(MongoConnectionString);
var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
// define and run pipeline
var results = moviesCollection.Aggregate()
.Search(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "Wom?n *"))
.Project<MovieDocument>(Builders<MovieDocument>.Projection
.Include(movie => movie.Title)
.Exclude(movie => movie.Id))
.Limit(5)
.ToList();
// print results
foreach (var movie in results)
{
Console.WriteLine(movie.ToJson());
}
}
}
[BsonIgnoreExtraElements]
public class MovieDocument
{
[BsonIgnoreIfDefault]
public ObjectId Id { get; set; }
public string Title { get; set; }
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// connect to your Atlas cluster
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
if err != nil {
panic(err)
}
defer client.Disconnect(context.TODO())
// set namespace
collection := client.Database("sample_mflix").Collection("movies")
// define pipeline stages
searchStage := bson.D{{"$search", bson.D{{"wildcard", bson.D{{"path", "title"}, {"query", "Wom?n *"}}}}}}
limitStage := bson.D{{"$limit", 5}}
projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}}}}
// run pipeline
cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
if err != nil {
panic(err)
}
// print results
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Aggregates.limit;
import static com.mongodb.client.model.Aggregates.project;
import static com.mongodb.client.model.Projections.excludeId;
import static com.mongodb.client.model.Projections.fields;
import static com.mongodb.client.model.Projections.include;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class WildcardMultiCharacter {
public static void main(String[] args) {
// connect to your Atlas cluster
String uri = "<connection-string>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
// set namespsace
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
// define pipeline
Document agg = new Document("query", "Wom?n *").append("path", "title");
// run pipeline and print results
collection.aggregate(Arrays.asList(
eq("$search", eq("wildcard", agg)),
limit(5),
project(fields(excludeId(), include("title"))))).forEach(doc -> System.out.println(doc.toJson()));
}
}
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

import com.mongodb.client.model.Aggregates.limit
import com.mongodb.client.model.Aggregates.project
import com.mongodb.client.model.Filters.eq
import com.mongodb.client.model.Projections.*
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
import org.bson.Document
fun main() {
val uri = "<connection-string>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Document>("movies")
runBlocking {
val agg = Document("query", "Wom?n *").append("path", "title")
val resultsFlow = collection.aggregate<Document>(
listOf(
eq("\$search", eq("wildcard", agg)),
limit(5),
project(fields(
excludeId(),
include("title")
))
)
)
resultsFlow.collect { println(it) }
}
mongoClient.close()
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

const { MongoClient } = require("mongodb");
// connect to your Atlas cluster
const uri =
"<connection-string>";
const client = new MongoClient(uri);
async function run() {
try {
await client.connect();
// set namespace
const database = client.db("sample_mflix");
const coll = database.collection("movies");
// define pipeline
const agg = [
{$search: {wildcard: {query: "Wom?n *", path: "title"}}},
{$limit: 5},
{$project: {_id: 0,title: 1}}
];
// run pipeline
const result = await coll.aggregate(agg);
// print results
await result.forEach((doc) => console.log(doc));
} finally {
await client.close();
}
}
run().catch(console.dir);

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

import pymongo
# connect to your Atlas cluster
client = pymongo.MongoClient('<connection-string>')
# define pipeline
pipeline = [
{"$search": {"wildcard": {"query": "Wom?n *", "path": "title"}}},
{"$limit": 5},
{"$project": {"_id": 0, "title": 1}},
]
# run pipeline
result = client["sample_mflix"]["movies"].aggregate(pipeline)
# print results
for i in result:
print(i)

위의 쿼리는 다음과 같은 결과를 반환합니다:

SCORE: 1 _id: "573a1393f29313caabcdcbdd"
plot: "Rival reporters Sam and Tess fall in love and get married, only to fin…"
genres: Array
runtime: 114
SCORE: 1 _id: "573a1394f29313caabce08c6"
plot: "A married, middle-aged woman is shocked to discover that her husband, …"
genres: Array
runtime: 93
SCORE: 1 _id: "573a1395f29313caabce254c"
plot: "An entomologist searching for insects by the seaside is trapped by loc…"
genres: Array
runtime: 123
SCORE: 1 _id: "573a1396f29313caabce42e5"
plot: "The battle of the sexes and relationships among the elite of Britian's…"
genres: Array
runtime: 131
SCORE: 1 _id: "573a1398f29313caabceb06d"
fullplot: "A woman's lover leaves her, and she tries to contact him to find out w…"
imdb: Object
year: 1988
SCORE: 1 _id: "573a139df29313caabcf9c83"
plot: "A new woman comes between a widower and his adult son."
genres: Array
runtime: 110
SCORE: 1 _id: "573a13a0f29313caabd050bf"
fullplot: "Isabella is a great cook, making her husband's restaurant in Bahia, Br…"
imdb: Object
year: 2000
SCORE: 1 _id: "573a13aaf29313caabd22c05"
countries: Array
genres: Array
runtime: 115
SCORE: 1 _id: "573a13aef29313caabd2d899"
countries: Array
genres: Array
runtime: 72
SCORE: 1 _id: "573a13aff29313caabd32566"
fullplot: "An adaptation of Bishop T.D. Jakes' self-help novel, chronciling a wom…"
imdb: Object
year: 2004

Search Tester는 반환하는 문서의 모든 필드를 표시하지 않을 수 있습니다. 쿼리 경로에 지정한 필드를 비롯하여 모든 필드를 보려면 결과에서 문서를 펼칩니다.

{ "title" : "Woman of the Year" }
{ "title" : "Woman in a Dressing Gown" }
{ "title" : "Woman in the Dunes" }
{ "title" : "Women in Love" }
{ "title" : "Women on the Verge of a Nervous Breakdown" }
{ "title" : "Woman of the Year" }
{ "title" : "Woman in a Dressing Gown" }
{ "title" : "Woman in the Dunes" }
{ "title" : "Women in Love" }
{ "title" : "Women on the Verge of a Nervous Breakdown" }
{ "title" : "Woman of the Year" }
{ "title" : "Woman in a Dressing Gown" }
{ "title" : "Woman in the Dunes" }
{ "title" : "Women in Love" }
{ "title" : "Women on the Verge of a Nervous Breakdown" }
[{title Woman of the Year}]
[{title Woman in a Dressing Gown}]
[{title Woman in the Dunes}]
[{title Women in Love}]
[{title Women on the Verge of a Nervous Breakdown}]
{"title": "Woman of the Year"}
{"title": "Woman in a Dressing Gown"}
{"title": "Woman in the Dunes"}
{"title": "Women in Love"}
{"title": "Women on the Verge of a Nervous Breakdown"}
Document{{title=Woman in the Meadow}}
Document{{title=Woman on the Beach}}
Document{{title=Woman in Love}}
Document{{title=Woman of the Year}}
Document{{title=Woman in a Dressing Gown}}
{ title: 'Woman of the Year' }
{ title: 'Woman in a Dressing Gown' }
{ title: 'Woman in the Dunes' }
{ title: 'Women in Love' }
{ title: 'Women on the Verge of a Nervous Breakdown' }
{'title': 'Woman of the Year'}
{'title': 'Woman in a Dressing Gown'}
{'title': 'Woman in the Dunes'}
{'title': 'Women in Love'}
{'title': 'Women on the Verge of a Nervous Breakdown'}

다음 예에서는 title 필드가 물음표로 끝나는 문서를 검색합니다.

참고

다음 예시는 mongosh에서 실행하기 위한 것입니다. 드라이버에서 이스케이프 문자를 사용하는 방법에 대한 자세한 내용은 이스케이프 문자 동작을 참조하세요.

query 필드의 * 문자는 모든 문자와 일치하며, \\? 문자열은 리터럴 물음표와 일치합니다.

다음 쿼리를 복사하여 Query Editor에 붙여 넣은 다음 Query Editor에서 Search 버튼을 클릭합니다.

[
{
$search: {
"wildcard": {
"path": "title",
"query": "*\\?"
}
}
}
]

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

db.movies.aggregate([
{
"$search": {
"wildcard": {
"path": "title",
"query": "*\\?"
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"title": 1
}
}
])

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

movies colection의 Aggregations 탭에서 드롭다운에서 단계를 선택하고 해당 단계에 대한 쿼리를 추가하여 다음 각 파이프라인 단계를 구성합니다. Add Stage를 클릭하여 단계를 추가합니다.

파이프라인 단계
쿼리
$search
{
"wildcard": {
"query": "*\\?",
"path": "title"
}
}
$limit
5
$project
{
"_id": 0,
"title": 1,
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.Conventions;
using MongoDB.Driver;
using MongoDB.Driver.Search;
public class WildcardEscapeCharacter
{
private const string MongoConnectionString = "<connection-string>";
public static void Main(string[] args)
{
// allow automapping of the camelCase database fields to our MovieDocument
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
// connect to your Atlas cluster
var mongoClient = new MongoClient(MongoConnectionString);
var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
// define and run pipeline
var results = moviesCollection.Aggregate()
.Search(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "*\\?"))
.Project<MovieDocument>(Builders<MovieDocument>.Projection
.Include(movie => movie.Title)
.Exclude(movie => movie.Id))
.Limit(5)
.ToList();
// print results
foreach (var movie in results)
{
Console.WriteLine(movie.ToJson());
}
}
}
[BsonIgnoreExtraElements]
public class MovieDocument
{
[BsonIgnoreIfDefault]
public ObjectId Id { get; set; }
public string Title { get; set; }
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// connect to your Atlas cluster
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
if err != nil {
panic(err)
}
defer client.Disconnect(context.TODO())
// set namespace
collection := client.Database("sample_mflix").Collection("movies")
// define pipeline stages
searchStage := bson.D{{"$search", bson.D{{"wildcard", bson.D{{"path", "title"}, {"query", "*\\?"}}}}}}
limitStage := bson.D{{"$limit", 5}}
projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}}}}
// run pipeline
cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
if err != nil {
panic(err)
}
// print results
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Aggregates.limit;
import static com.mongodb.client.model.Aggregates.project;
import static com.mongodb.client.model.Projections.excludeId;
import static com.mongodb.client.model.Projections.fields;
import static com.mongodb.client.model.Projections.include;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class WildcardEscapeCharacter {
public static void main(String[] args) {
// connect to your Atlas cluster
String uri = "<connection-string>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
// set namespace
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
// define pipeline
Document agg = new Document("query", "*\\?").append("path", "title");
// run pipeline and print results
collection.aggregate(Arrays.asList(
eq("$search", eq("wildcard", agg)),
limit(5),
project(fields(excludeId(), include("title"))))).forEach(doc -> System.out.println(doc.toJson()));
}
}
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

import com.mongodb.client.model.Aggregates.limit
import com.mongodb.client.model.Aggregates.project
import com.mongodb.client.model.Filters.eq
import com.mongodb.client.model.Projections.*
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
import org.bson.Document
fun main() {
val uri = "<connection-string>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Document>("movies")
runBlocking {
val agg = Document("query", "*\\?").append("path", "title")
val resultsFlow = collection.aggregate<Document>(
listOf(
eq("\$search", eq("wildcard", agg)),
limit(5),
project(fields(
excludeId(),
include("title")
))
)
)
resultsFlow.collect { println(it) }
}
mongoClient.close()
}

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

const { MongoClient } = require("mongodb");
// connect to your Atlas cluster
const uri =
"<connection-string>";
const client = new MongoClient(uri);
async function run() {
try {
await client.connect();
// set namespace
const database = client.db("sample_mflix");
const coll = database.collection("movies");
// define pipeline
const agg = [
{$search: {wildcard: {query: "*\\?", path: "title"}}},
{$limit: 5},
{$project: {_id: 0,title: 1}}
];
// run pipeline
const result = await coll.aggregate(agg);
// print results
await result.forEach((doc) => console.log(doc));
} finally {
await client.close();
}
}
run().catch(console.dir);

단계는 $limit 결과를 5개 문서로 제한하고, $project 단계는 결과를 title 필드로 제한합니다.

import pymongo
# connect to your Atlas cluster
client = pymongo.MongoClient('<connection-string>')
# define pipeline
pipeline = [
{"$search": {"wildcard": {"query": "*\\?", "path": "title"}}},
{"$limit": 5},
{"$project": {"_id": 0, "title": 1}},
]
# run pipeline
result = client["sample_mflix"]["movies"].aggregate(pipeline)
# print results
for i in result:
print(i)

위의 쿼리는 다음과 같은 결과를 반환합니다:

SCORE: 1 _id: "573a1390f29313caabcd5ea4"
plot: "A District Attorney's outspoken stand on abortion gets him in trouble …"
genres: Array
runtime: 62
SCORE: 1 _id: "573a1392f29313caabcdab4a"
plot: "Robin is crooning to a Mae West-like Jenny Wren when he is shot with a…"
genres: Array
runtime: 8
SCORE: 1 _id: "573a1394f29313caabce08ab"
plot: "Elmer Fudd is again hunting rabbits - only this time it's an opera. Wa…"
genres: Array
runtime: 7
SCORE: 1 _id: "573a1394f29313caabce08c8"
plot: "To save his career, an ad man wants a sex symbol to endorse a lipstick…"
genres: Array
runtime: 93
SCORE: 1 _id: "573a1395f29313caabce1555"
plot: "In order to get back into the good graces with his wife with whom he h…"
genres: Array
runtime: 115
SCORE: 1 _id: "573a1395f29313caabce1dce"
plot: "A former child star torments her crippled sister in a decaying Hollywo…"
genres: Array
runtime: 134
SCORE: 1 _id: "573a1395f29313caabce2422"
plot: "Roger Willoughby is considered to be a leading expert on sports fishin…"
genres: Array
runtime: 120
SCORE: 1 _id: "573a1395f29313caabce2d63"
plot: "The true story of the departure of the German occupiers from Paris in …"
genres: Array
runtime: 173
SCORE: 1 _id: "573a1395f29313caabce2db5"
plot: "In this excoriating satire of the fashion industry, Polly Maggoo is a …"
genres: Array
runtime: 101
SCORE: 1 _id: "573a1395f29313caabce2ecc"
plot: "A bitter aging couple with the help of alcohol, use a young couple to …"
genres: Array
runtime: 131

Search Tester는 반환하는 문서의 모든 필드를 표시하지 않을 수 있습니다. 쿼리 경로에 지정한 필드를 비롯하여 모든 필드를 보려면 결과에서 문서를 펼칩니다.

{ "title" : "Where Are My Children?" }
{ "title" : "Who Killed Cock Robin?" }
{ "title" : "What's Opera, Doc?" }
{ "title" : "Will Success Spoil Rock Hunter?" }
{ "title" : "Who Was That Lady?" }
{ "title" : "Where Are My Children?" }
{ "title" : "Who Killed Cock Robin?" }
{ "title" : "What's Opera, Doc?" }
{ "title" : "Will Success Spoil Rock Hunter?" }
{ "title" : "Who Was That Lady?" }
{ "title" : "Where Are My Children?" }
{ "title" : "Who Killed Cock Robin?" }
{ "title" : "What's Opera, Doc?" }
{ "title" : "Will Success Spoil Rock Hunter?" }
{ "title" : "Who Was That Lady?" }
[{title Where Are My Children?}]
[{title Who Killed Cock Robin?}]
[{title What's Opera, Doc?}]
[{title Will Success Spoil Rock Hunter?}]
[{title Who Was That Lady?}]
{"title": "Where Are My Children?"}
{"title": "Who Killed Cock Robin?"}
{"title": "What's Opera, Doc?"}
{"title": "Will Success Spoil Rock Hunter?"}
{"title": "Who Was That Lady?"}
Document{{title=Who Are You, Polly Magoo?}}
Document{{title=Where Were You When the Lights Went Out?}}
Document{{title=Why Does Herr R. Run Amok?}}
Document{{title=What's Up, Doc?}}
Document{{title=Who Is Killing the Great Chefs of Europe?}}
{ title: 'Where Are My Children?' }
{ title: 'Who Killed Cock Robin?' }
{ title: "What's Opera, Doc?" }
{ title: 'Will Success Spoil Rock Hunter?' }
{ title: 'Who Was That Lady?' }
{'title': 'Where Are My Children?'}
{'title': 'Who Killed Cock Robin?'}
{'title': "What's Opera, Doc?"}
{'title': 'Will Success Spoil Rock Hunter?'}
{'title': 'Who Was That Lady?'}

돌아가기

text

이 페이지의 내용