как игнорировать другие поля при сопоставлении поля в массиве в mongodb? - PullRequest
0 голосов
/ 17 апреля 2020

коллекция

{ _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
{ _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }

запрос

db.survey.find(
   { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } }
)

возвращает

{ "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "xyz", "score" : 8 } ] }

, но я также хотел игнорировать {"product": "ab c "," score ": 7} при возврате json .i пробовал другое совпадение, так как он все еще возвращается с другими записями. Как с этим справиться? Пожалуйста, помогите спасибо

1 Ответ

1 голос
/ 17 апреля 2020

Вам необходимо спроецировать результаты сопоставления с помощью позиционного оператора $, иначе он всегда будет возвращать полный документ, соответствующий запросу. (следовательно, почему вы получаете полные результаты).

db.survey.find(
   { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } },
   { "results.$": 1 }
)
...