首页 > 解决方案 > 基于数组字段的MongoDB查找查询

问题描述

收藏:

{
         "_id" : ObjectId("57506d74c469888f0d631be6"),
         "name" : "mycollection",
         "details" : [ 
             {
                 "date" : "25/03/2020",
                 "number" : "A",
                 "active" : false
              }
        },
{
        "_id" : ObjectId("57506d74c469888f0d631usi"),
        "name" : "newcollection",
        "details" : [ 

            {
                "date" : "30/03/2020",
                "number" : "C",
                "active" : false
            } 
        },
{
        "_id" : ObjectId("57506d74c4633388f0d631usi"),
        "name" : "mycollection",
        "details" : [ 

            {
                "date" : "31/03/2020",
                "number" : "C",
                "active" : false
            }
        },
    }

根据详细信息字段中的活动状态获取值的查找查询。

我努力了:

db.collection.find(
    {"name": "mycollection", "details": {"active": False}})

预期结果:我需要在每个集合的详细信息字段下活动为 false 的集合。此处应显示记录 ID ObjectId("57506d74c469888f0d631be6") 和 ObjectId("57506d74c4633388f0d631usi")。

标签: pythonmongodbmongodb-queryaggregation-frameworkpymongo

解决方案


文档在此处包含有关此类查询的部分:https ://docs.mongodb.com/manual/tutorial/query-array-of-documents/

您的查询不起作用,因为该语法要求数组包含该确切对象,但数组中的文档包含额外字段,因此不匹配。

这种情况的查询是db.collection.find({"name": "mycollection", "details.active": False})

注意:这将返回数组包含 active==false 的对象的所有文档,但它不会过滤实际数组以删除任何 active=true 的元素。


推荐阅读