我有一个包含以下文件的集合:
{
"_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,结果就是那三个。在这种情况下我只需要一个。
你有解决方案吗?
答案 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})