首页 > 解决方案 > Mongo查询以查找对象数组中的字段

问题描述

我有一个名为的集合collectionA,其中包含一个类型对象数组。

例子:

{
"_id" : ObjectId("123456"),
"tags" : [ 
    {
        "name" : "Bob D",
    }, 
    {
        "name" : "another name",
    }
    ...

我将如何编写与对象数组中的名称匹配的查询?我试过db.getCollection('collectionA').find({ "name": "Bob D})了,但没有奏效。

标签: mongodbmongodb-query

解决方案


要过滤嵌套数组,您可以使用$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" ] } } } } } ])

推荐阅读