如何在mongo查询中为数组元素中的属性提供多个条件?

时间:2015-05-15 08:45:04

标签: arrays mongodb

我有一个包含以下文件的集合:

    {
       "_id": 1,  
       "books": [  
         {  
           "id":"Sherlock Holmes",  
           "category":"Novel"  
         },  
         {  
           "id":"10 tips for cook",  
           "category":"Tips"  
         }  
       ]  
    },  
    {  
       "_id": 2,  
       "books": [    
         {
           "id":"10 tips for cook",  
           "category":"Tips"
         }  
        ]  
    },  
    {
       "_id": 3,  
       "books": [  
         {  
           "id":"Sherlock Holmes",  
           "category":"Novel"  
         }  
       ]  
    }

我想查询文档包含id为“Sherlock Holmes”和“10个烹饪提示”的书籍,其中“_id”为1。

我尝试过使用$ in和$ elemMatch,结果就是那三个。在这种情况下我只需要一个。

你有解决方案吗?

2 个答案:

答案 0 :(得分:4)

使用$and运算符搜索具有多个表达式的相同字段。

db.coll.find({
    '$and': [
        {'books.id': 'Sherlock Holmes'},
        {'books.id': '10 tips for cook'}
    ]
})

结果:

{
    "_id" : 1,
    "books" : [ 
        {
            "id" : "Sherlock Holmes",
            "category" : "Novel"
        }, 
        {
            "id" : "10 tips for cook",
            "category" : "Tips"
        }
    ]
}

答案 1 :(得分:0)

因为_id在MongoDB集合中是唯一的,所以您只需查询

即可
db.myCollection.find({_id:1})

如果您不希望返回整个文档,则可以使用投影

db.myCollection.find({_ id:1},{_ id:0,books:1})