$ 및/또는 $ all 연산자를 사용하여 수행하려는 것으로 생각하는 것을 수행 할 수 있습니다.
귀하의 예를 감안할 때 문서 :
> db.test.find().pretty()
{
"_id" : ObjectId("4f26b716c27b085280a45a29"),
"name" : "Apollo",
"text" : "Some text about Apollo moon landings",
"keywords" : [
"some",
"text",
"about",
"apollo",
"moon",
"landings"
]
}
당신은 누구의 "키워드"배열이 두 단어가 포함 된 문서를 검색하기 위해 $ 및 연산자를 사용할 수 있습니다.
> db.test.find({$and:[{keywords:"apollo"}, {keywords:"landings"}]})
{ "_id" : ObjectId("4f26b716c27b085280a45a29"), "name" : "Apollo", "text" : "Some text about Apollo moon landings", "keywords" : [ "some", "text", "about", "apollo", "moon", "landings" ] }
>
모든 작업자가 동일한 결과를 반환 할 것입니다 $, 쿼리
좀 더 능률적이다 :
> db.test.find({keywords:{$all:["apollo", "landings"]}})
{ "_id" : ObjectId("4f26b716c27b085280a45a29"), "name" : "Apollo", "text" : "Some text about Apollo moon landings", "keywords" : [ "some", "text", "about", "apollo", "moon", "landings" ] }
우리가 키워드 배열에 인덱스를 넣어 경우, 두 쿼리가 사용합니다.
> db.test.ensureIndex({keywords:1})
> db.test.find({$and:[{keywords:"apollo"}, {keywords:"landings"}]}).explain()
{
"cursor" : "BtreeCursor keywords_1",
"nscanned" : 1,
"nscannedObjects" : 1,
"n" : 1,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : {
"keywords" : [
[
"apollo",
"apollo"
]
]
}
}
> db.test.find({keywords:{$all:["apollo", "landings"]}}).explain()
{
"cursor" : "BtreeCursor keywords_1",
"nscanned" : 1,
"nscannedObjects" : 1,
"n" : 1,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : {
"keywords" : [
[
"apollo",
"apollo"
]
]
}
}
>
두 쿼리 모두 키워드 색인을 사용합니다.
다른 유형의 쿼리에 대한 자세한 내용은 "고급 쿼리"문서를 참조하십시오.
http://www.mongodb.org/display/DOCS/Advanced+Queries
Mongo에서 색인 생성이 작동하는 방법에 대한 자세한 내용은 "색인 생성"문서를 참조하십시오.
http://www.mongodb.org/display/DOCS/Indexes#Indexes-IndexingArrayElements
"인덱싱 배열 요소"섹션은 MultiKeys의 설명서로 연결됩니다. 당신이 MongoDB를의 .explain 기능에 익숙하지 않은 경우 http://www.mongodb.org/display/DOCS/Multikeys
, 여기 설명 : 간단히 말해서 http://www.mongodb.org/display/DOCS/Explain , 그것은 순서로 액세스 할 수있는 쿼리가 사용하는 인덱스, 얼마나 많은 필요한 문서를 표시 관련된 것들을 반환합니다.
마지막으로 질문은 오늘 아침 배열에서 값을 검색하는 다른 사용자의 질문과 비슷합니다. 아마도 이것은 당신과 관련이있을 것입니다.
http://groups.google.com/group/mongodb-user/browse_thread/thread/38f30a56094d9e3e
바라 건데, 이것은 당신이 당신이 찾고있는 쿼리를 작성하는 데 도움이 될 것입니다. 후속 질문이 있으면 알려주십시오.
내 질문이 잘못 작성되었을 수 있습니다. 그러나 해결하고 싶은 문제는 "apollo"와 "landings"가 어구 쿼리 "apollo landings"와 같이 서로 옆에 서있는 경우에만 결과를 반환해야한다는 것입니다. . "apollo xxxx landings"이라는 텍스트가있는 경우 문구가 아니기 때문에 결과로 결과를 반환하지 않아야합니다. 그러한 질의를 할 수 있습니까? – freakshow