在猫鼬中查找包含多个项目的对象

时间:2020-07-07 21:15:12

标签: node.js mongodb mongoose

我在使用mongoose查询mongodb时遇到某些问题,但找不到所需的输出。以下是我正在寻找解决方案的数据。

我试图找到两个参数,一个是位置,第二个是类型

{
    "_id" : ObjectId("5f04dcf8e123292518a863ae"),
    "location" : "Australia",
    "name" : "June Bill",
    "filters" : [ 
        {
            "_id" : ObjectId("5f047efe9fc7ad000f44f990"),
            "name" : "Q1",
            "type" : "Platinum",
            "conditions" : [ 
                {
                    "And" : [ 
                        {
                            "_id" : "objectid",
                            "field" : "location",
                            "value" : "Australia",
                            "operator" : "equal"
                        },
                        {
                            "_id" : "objectid",
                            "field" : "name",
                            "value" : "admin",
                            "operator" : "equal"
                        }
                    ]
                }
            ]
        }, 
        {
            "_id" : ObjectId("5f04d51c0ce40120bbb7dc6e"),
            "name" : "Q2",
            "type" : "Gold",
            "conditions" : [ 
                {
                    "_id" : ObjectId("5f04d51c0ce40120bbb7dc6f"),
                    "field" : "ocation",
                    "value" : "Australia",
                    "operator" : "equal"
                }, 
                {
                    "_id" : ObjectId("5f04d51c0ce40120bbb7dc70"),
                    "field" : "start_date",
                    "value" : "2020-06-01T00 3A00",
                    "operator" : "equal"
                },
            ]
        }
    ],
    "__v" : 0
},

{
    "_id" : ObjectId("5f04dcf8e123292518a863ae"),
    "location" : "Brazil",
    "name" : "June Bill",
    "filters" : [ 
        {
            "_id" : ObjectId("5f047efe9fc7ad000f44f990"),
            "name" : "Q1",
            "type" : "Silver",
            "conditions" : [ 
                {
                    "And" : [ 
                        {
                            "_id" : "objectid",
                            "field" : "location",
                            "value" : "Australia",
                            "operator" : "equal"
                        },
                        {
                            "_id" : "objectid",
                            "field" : "name",
                            "value" : "admin",
                            "operator" : "equal"
                        }
                    ]
                }
            ]
        }, 
        {
            "_id" : ObjectId("5f04d51c0ce40120bbb7dc6e"),
            "name" : "Q2",
            "type" : "Gold",
            "conditions" : [ 
                {
                    "_id" : ObjectId("5f04d51c0ce40120bbb7dc6f"),
                    "field" : "location",
                    "value" : "Australia",
                    "operator" : "equal"
                }, 
                {
                    "_id" : ObjectId("5f04d51c0ce40120bbb7dc70"),
                    "field" : "start_date",
                    "value" : "2020-06-01T00 3A00",
                    "operator" : "equal"
                },
            ]
        }
    ],
    "__v" : 0
}

在这里我尝试用location查找,在filters中查找其type 我该怎么用猫鼬呢?

我尝试过

Model.find({'location': 'Brazil', 'filters':{ "$in" : ["Silver"]} });

但是它没有用,有人可以帮助我取得实际结果吗?

2 个答案:

答案 0 :(得分:1)

您可以使用.来查询嵌入式文件,或者如果要匹配多个字段,可以使用$elemMatch

db.collection.find({
  "location": "Brazil",
  "filters.type": {
    "$in": [
      "Silver"
    ]
  }
},
{
  "filters.$": 1
})

MongoDB Playground

如果要滤除匹配的结果,可以在投影中使用$ operator

答案 1 :(得分:0)

使用这种方式:

db.collection.find({
  "location": "Brazil",
  "filters.type": "Silver"
})

MongoDb Playground