我有一个查询,它应该根据时间戳范围标准从文档中的一个数组返回多个子文档。我首先通过指定一些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中执行查询?
发布于 2018-06-07 03:59:48
假设你有一个这样的文档:
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" ] }
]
}
}
}
}
}
])https://stackoverflow.com/questions/50727822
复制相似问题