mongodb - 投影嵌套数组中的特定元素

标签 mongodb mongodb-query

我有一个这样的文档..

{
    "_id" : ObjectId("59b0ea9b3a91af574a3e0464"),
    "machineID" : "b83c",
    "sensorState" : [ 
        {
            "data" : "377",
            "sensor" : "solar",
            "time" : ISODate("2017-09-20T19:42:58.766Z")
        }, 
        {
            "data" : "35",
            "sensor" : "photosynthetic",
            "time" : ISODate("2017-09-20T19:42:58.782Z")
        }, 
        {
            "data" : "370",
            "sensor" : "solar",
            "time" : ISODate("2017-09-20T19:43:29.089Z")
        }, 
        {
            "data" : "400",
            "sensor" : "solar",
            "time" : ISODate("2017-09-20T19:44:29.089Z")
        }, 
        {
            "data" : "35",
            "sensor" : "photosynthetic",
            "time" : ISODate("2017-09-20T19:43:29.110Z")
        }
    ]
}

我只想检索 sensorState 数组中与 sensor=solar 匹配的子文档。所以,我尝试这样做:

db.getCollection('sensorDB').find({ },
    { "sensorState" : { $elemMatch: {data : "35" } } })

但它只显示一个结果:

{
    "_id" : ObjectId("59b0ea9b3a91af574a3e0464"),
    "sensorState" : [ 
        {
            "data" : "35",
            "sensor" : "photosynthetic",
            "time" : ISODate("2017-09-20T19:42:58.782Z")
        }
    ]
}

但是,我想在 sensorState 数组中查找与 sensor=solar 匹配的所有子文档。看起来 $elemMatch 只能选择一个结果。

最佳答案

我自己找到了答案。使用聚合 答案是这样的

db.getCollection('sensorDB').aggregate(
        {$match: {machineID:"b83c"}},
        {$unwind:"$sensorState"},
        {$match: {"sensorState.sensor":"solar"}}
)

关于mongodb - 投影嵌套数组中的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46544057/

相关文章:

MongoDB C# 驱动程序 : Execute Database Method through the SDK?

mongodb - PHP MongoDB,更新文档而不删除其余部分

ruby - find_one MongoDB Ruby 驱动程序

mongodb - 在 MongoDB 中查找 2 级嵌套数组

node.js - 有没有办法使用聚合从 Mongoose 的 ObjectId 获取日期?

php - 使用 php yii2 ex 对 mongodb 中的字段求和

java - 使用吗啡数据存储在 mongodb 中查询和更新

mongodb - Mongoose 中groupBy后的总和

java - 获取带有 Java 驱动程序的 mongoDB 中最后插入的文档的 ID

mongodb 以前的发布日期