【问题标题】:MongoDB mongoose $elemMatch for multiple results [duplicate]用于多个结果的 MongoDB mongoose $elemMatch [重复]
【发布时间】:2018-06-07 03:59:47
【问题描述】:

我有一个查询,它应该根据时间戳范围标准从文档中的数组返回多个子文档。我首先通过指定一些 id 来选择主要文档:

在 Mongo Shell 中是:

 db.fps.find({"_id": {$in: [15,24] }}, {someArray: {$elemMatch: {Timestamp: {$gt: "2018-06-06T18:00:00", $lt:"2018-06-07"}}}}).pretty()

由于 $elemMatch,它只返回与我的查询匹配的第一个文档。 但是,我希望返回所有符合条件的相关文档。

我必须如何在 mongoose 中进行查询?

【问题讨论】:

  • 您能从您的收藏中粘贴示例文档吗?

标签: mongodb mongoose


【解决方案1】:

假设您有这样的文档:

db.fps.save({_id: 15, someArray: [ { Timestamp: "2018-06-06T19:00:00" }, { Timestamp: "2018-06-06T19:00:00" }, { Timestamp: "2018-06-07T00:00:00" } ]});

要过滤嵌套数组,您需要聚合框架,其中$match 将代表您的匹配条件,$filter 将应用时间戳比较。 $addFields 只是在此处的结果集中覆盖 someArray

db.fps.aggregate([
    {
        $match: { "_id": {$in: [15,24] } }
    },
    {
        $addFields: {
            someArray: {
                $filter: {
                    input: "$someArray",
                    as: "doc",
                    cond: {
                        $and: [
                            { $gt: [ "$$doc.Timestamp", "2018-06-06T18:00:00" ] },
                            { $lt: [ "$$doc.Timestamp", "2018-06-07" ] }
                        ]
                    }
                }
            }
        }
    }
])

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 2019-06-24
    • 2023-03-24
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多