我是Mongo的新手,所以感谢任何帮助。
我有一个User对象,并且在其中有多个对象,这些对象基于用户与每个对象的交互来托管客户端数据。
这就是它的样子
db.users.findOne(
{"clients.clientId":35},
{"clients.clientId":1}
)
{
"_id" : ObjectId("586670e6ce9287cf6d197d14"),
"clients" : [
{ "clientId" : 35 },
{ "clientId" : 67 },
{ "clientId" : 73 },
{ "clientId" : 78 },
{ "clientId" : 82 }
]
}
从我的查询中可以看出,它返回一个用户,该用户拥有来自客户端35的数据,但也返回来自其他客户端的数据。
如何仅访问来自客户端35的数据?
答案 0 :(得分:2)
您在clients
键上有一个嵌入式文档数组。
您的查询投影{"clients.clientId":1}
表明查询应仅返回该密钥clients
密钥。您的clients
字段是一个数组,因此将提取(投影)数组中的所有嵌入文档。
当您只想显示数组中的一个元素时,查询中定义的元素(即ID为{"clients.clientId":35}
的客户端)需要使用projection positional operator $:
db.users.findOne({"clients.clientId":35},{"clients.$":1})
结果:
{
"_id" : ObjectId("586670e6ce9287cf6d197d14"),
"clients" : [
{
"clientId" : 35
}
]
}
注意:使用$
运算符,它只会投影与查询匹配的数组中的第一个元素;如果阵列中有更多文档具有相同的值,则只显示第一个文档。