mongodb - 从 MongoDB 获取特定值

标签 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 的数据?

最佳答案

您在 clients 键上有一个嵌入的文档数组。

您的查询投影 {"clients.clientId":1} 指出查询应仅返回该键 clients 键。您的 clients 字段是一个数组,因此该数组中的所有嵌入文档都将被提取(投影)。

当您只想显示数组中的一个元素时,即查询中定义的元素,即 id 为 35 的客户端 {"clients.clientId":35},需要使用 projection positional operator $ :

db.users.findOne({"clients.clientId":35},{"clients.$":1})

结果:

{
    "_id" : ObjectId("586670e6ce9287cf6d197d14"),
    "clients" : [
        {
            "clientId" : 35
        }
    ]
}

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

关于mongodb - 从 MongoDB 获取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41444670/

相关文章:

java - 整数不能转换为 float

MongoDB - 从任意深度和对象结构获取子文档

mongodb - Sails.js $near 查询不起作用并要求索引

mongodb - mongodb 中日志分析数据库的最佳模式设计

c# - MongoDb c#官方驱动批量更新

Mongodb:向集群添加新分片会增加集群的负载

java - Spring 多个打开的连接

mongodb - 如何停止在 mongodb 集合中插入重复文档

php - MongoDB AND & OR 条件中的复杂语句

mongodb - 在 mongodb 中相乘说只对字符串类型进行操作