2016-10-19 2 views
0
{ 
    "_id":objectId(23651478), 
    "name":"Tomatos", 
    "company":"vikranth transports", 
    "array":[ 
      {"title":"Vegetables"} 
      ], 
    "description":"Vegitables are good to health" 
}, 
{ 
    "_id":objectId(45761244), 
    "name":"Apples", 
    "company":"jessy transports", 
    "array":[ 
      {"title":"Fruits"} 
      ] 
    "description":"Fruits are good to health, vegitables are also good to health" 
}, 
{ 
    "_id":objectId(45761244), 
    "name":"Nepal apples", 
    "company":"sai transports", 
    "array":[ 
      {"title":"Vegetables-home-made"} 
      ] 
    "description":"Fruits are good to health, vegitables are also good to health" 
} 

이상은 내 프로젝트 요구 사항에 대한 mongodb 모달입니다. 지금 내가 원하는 것은 내가 "제목"을 검색 할 수 있습니다 : 유일한 과일 이름이 와야한다 "과일"그 결과에서 내가 회사를 필터링해야한다 "jessy는 전송"나는 시도 무엇mongodb 전체에 flitering에 대한 몽고 쿼리

{"$text":{"$search":"jessy transports"}},{"array":{"$elemMatch":{"title":{"$in":[/Fruits/]}}}} 
입니다

여기에 "과일"을 검색하려고하기 때문에 $ text 검색을 사용했습니다. 나는 "jessy transports"를 걸러 내려고했다. 하지만 나는 모든 "jessy transports"를 얻은 다음 "Fruits"를 필터링하지 않습니다

정확히 "과일"을 검색 할 때 원하는 것은 "제목"을 가진 모든 과일을 얻고 싶습니다. "과일"을 배열로 가져오고 싶습니다. .

-> "과일"을 검색 할 때 "jessy transports"라는 회사 이름 만 있으면 jessy 전송이있는 과일을 가져야합니다.

-> 내가 "과일"과 그에서 검색 할 때 나는 "jessy의 전송"을 가진 유일한 회사 이름을 원하고 결과에서 나는이 시도 "건강"

답변

2

에 대한 텍스트 검색을 원하는 :

db.YOUR_COLLECTION.aggregate(
    {$unwind:"$array"}, 
    {$match: {"array.title" :'fruits', 'company': 'jessy transports'}}).pretty() 

$unwind을 사용하고 쿼리를 일치시킵니다. 이렇게하면 결과가 나온다.

{ 
"_id" : ObjectId("58076939309f9df8e6b59573"), 
"name" : "Apples", 
"company" : "jessy transports", 
"array" : { 
    "title" : "Fruits" 
}, 
"description" : "Fruits are good to health, vegitables are also good to health" 
}