我有一个名为collectionA
的集合,其中包含类型对象的数组。
示例:
{
"_id" : ObjectId("123456"),
"tags" : [
{
"name" : "Bob D",
},
{
"name" : "another name",
}
...
如何编写与对象数组中的名称匹配的查询?
我已经尝试过db.getCollection('collectionA').find({ "name": "Bob D})
,但这没用。
答案 0 :(得分:1)
要过滤嵌套数组,您可以使用$elemMatch(作为投影):
db.col.find({ "tags.name": "Bob D" }, { tags: { $elemMatch: { name: "Bob D" } } })
返回第一个匹配数组元素,或使用$filter获取tags
数组的多个匹配元素:
db.col.aggregate([ { $addFields: { tags: { $filter: { input: "$tags", as: "tag", cond: { $eq: [ "$$tag.name", "Bob D" ] } } } } } ])