首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个结果的MongoDB mongoose $elemMatch

多个结果的MongoDB mongoose $elemMatch
EN

Stack Overflow用户
提问于 2018-06-07 03:04:56
回答 1查看 618关注 0票数 -1

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

在Mongo Shell中,它是:

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 03:59:48

假设你有一个这样的文档:

代码语言:javascript
复制
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

代码语言:javascript
复制
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" ] }
                        ]
                    }
                }
            }
        }
    }
])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50727822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档