首页 > 解决方案 > 如何使用 mongoose find 按内部数组进行过滤

问题描述

{
    "_id" : ObjectId("5fa27539e2b1a10d0fdb82ba"),
    "extra_fields" : [ 
        {
            "tag" : "alias",
            "value" : "thealias"
        }, 
        {
            "tag" : "name",
            "value" : "nobody"
        },
    ]
}

这就是我所指的对象,例如,我需要在每个对象的 extra_fields 数组中查询所有具有 tag="alias" 的对象。如何使用 MongoDB 实现这一目标?任何帮助将不胜感激。

更新:请检查这个,

{
    "_id" : ObjectId("5fa1b8ee30caf0655a64104a"),
    "status" : true,
    "extra_fields" : [ 
        {
            "tag" : "alias",
            "value" : "hes"
        }, 
        {
            "linked_collection_id" : "5fa1946a3ef5864410728f1f",
            "linked_master_id" : [ 
                "5fa19884dae0ba587c891d9a"
            ]
        }, 
        {
            "linked_collection_id" : "5f7d68861d5a43b422b12c6d",
            "linked_master_id" : [ 
                "5f7d6c3b629ab057b67fa789"
            ]
        }
    ]
}

我需要知道如何检索具有linked_collection_id='abc'且linked_master_id 包含'xyz'的对象。谢谢

标签: arraysmongodbfind

解决方案


您只需要"extra_fields.tag": "alias"比较字段和结果。

查询很简单:

db.collection.find({
  "extra_fields.tag": "alias"
})

通过这种方式,将返回至少包含一个值为“alias”的“tag”字段的每个文档。

这里的例子

编辑:

要按多个字段查找,您可以使用以下命令:

db.collection.find({
  "extra_fields.linked_collection_id": "abc",
  "extra_fields.linked_master_id": "xyz"
})

推荐阅读