从MongoDB获取特定值

时间:2017-01-03 13:30:49

标签: mongodb mongodb-query

我是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的数据?

1 个答案:

答案 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
        }
    ]
}

注意:使用$运算符,它只会投影与查询匹配的数组中的第一个元素;如果阵列中有更多文档具有相同的值,则只显示第一个文档。