Joe*_*oel 4 mongodb nosql mongodb-query
您好,我有一个 mongodb find() 问题查询。我试图在同一个对象数组中找到具有两个特定 ID 的所有文档。
示例文档结构:
文档 1
{
gameId:394028,
people: [{
id: 5,
mapSide: 'left'
},{
id: 4,
mapSide: 'right'
},{
id: 1,
mapSide: 'right'
},{
id: 2,
mapSide: 'left'
}]
}
Run Code Online (Sandbox Code Playgroud)
文档 2
{
gameId:394028,
people: [{
id: 7,
mapSide: 'left'
},{
id: 9,
mapSide: 'right'
},{
id: 4,
mapSide: 'right'
},{
id: 1,
mapSide: 'left'
}]
}
Run Code Online (Sandbox Code Playgroud)
我将如何在同一个 people 数组中获取 id 为 5 和 4 的所有文档?我试过这个shell命令:
db.COLLECTION.find({"people.id":5, "people.id":4}); //should return doc 1
Run Code Online (Sandbox Code Playgroud)
但是我还没有得到任何结果。我也打算仅在他们有不同的地图方面时才找到 id - 我试过这个:
db.COLLECTION.find({
people: {$elemMatch:{id:4, mapSide:"left"},
people: {$elemMatch:{id:1, mapSide:"right"}
},{
people: {$elemMatch:{id:4, mapSide:"right"},
people: {$elemMatch:{id:1, mapSide:"left"}
}); //Should return doc 2, because doc 1 has both mapSide as 'right'
Run Code Online (Sandbox Code Playgroud)
如果我能回答这些问题中的任何一个,那就太好了!谢谢。
您可以使用以下查询来查找people
数组同时包含元素 withid == 4
和元素 with 的所有文档id == 5
:
db.COLLECTION.find( { $and : [ { 'people.id' : 4 }, { 'people.id' : 5 } ] } )
Run Code Online (Sandbox Code Playgroud)