查询数组中的部分对象 - MongoDB

时间:2012-07-10 13:23:58

标签: mongodb mongodb-php

我有一个简单的结构化文档:

"people" : [
    {
        "id" : "6241863",
        "amount" : 5
    }
],

人们可以包含多个元素。我设法让这个工作:

db.village.findOne({"people": {"$in": [{"id": "6241863", "amount": 5}]}})

但我想忽略金额并搜索包含ID为6241863且任意金额的人的任何文件。

2 个答案:

答案 0 :(得分:5)

根据advanced query documentation,您可以将数组值查询与dot notation for reaching into objects混合使用。以下是使用您的架构的示例:

$ mongo
MongoDB shell version: 2.1.0
connecting to: test
> db.users.save({_id: 1, friends: [{id: 2, name: 'bob'}]})
> db.users.find({friends: {id: 2, name: 'bob'}})
{ "_id" : 1, "friends" : [ { "id" : 2, "name" : "bob" } ] }

> db.users.find({'friends.id': 2})
{ "_id" : 1, "friends" : [ { "id" : 2, "name" : "bob" } ] }

> db.users.find({'friends.name': 'bob'})
{ "_id" : 1, "friends" : [ { "id" : 2, "name" : "bob" } ] }

> db.users.find({'friends.name': 'ted'})
> 

答案 1 :(得分:0)

尝试使用

db.village.findOne({"people" : { "$in" : [{ "id" : "6241863" , "amount" : { "$ne" : null } }]}})