MongoDB文档嵌套文档筛选
我在和MongoDb战斗 我有一个文档集合,单个文档的结构如下MongoDB文档嵌套文档筛选,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我在和MongoDb战斗 我有一个文档集合,单个文档的结构如下 { "_id": { "$oid": "588a931d5c98fe0f3f84d93f" }, "name": "Michele", "type": "F", "category": "G", "meta":{ "code": "113835667", "updated": {"$date": "2017-02-07T00:00:00.000Z"},
{
"_id": { "$oid": "588a931d5c98fe0f3f84d93f" },
"name": "Michele",
"type": "F",
"category": "G",
"meta":{
"code": "113835667",
"updated": {"$date": "2017-02-07T00:00:00.000Z"},
"since": {"$date": "2013-11-07T23:00:00.000Z"}
},
"data": [
{
"date": {"$date": "2013-11-07T23:00:00.000Z"},
"close": 12.23
}
... // removed
{
"date": {"$date": "2017-02-07T00:00:00.000Z"},
"close": 15.22
}
]
}
我需要实现的是返回具有匹配_id的文档,但从数据数组中筛选出日期属性不在指定时间范围内的文档
这就是我从现在开始尝试的
let id; //[DocumentId]
let from; //[Date]
let to; //[Date]
collection.aggregate([
{ $match: { _id: { $eq: id } } },
{ $unwind: '$data' },
{ $match: { 'data.date': { $gte: from, $lte: to } } },
{ $group: { _id: '$_id',
data: { $push: { date:'$data.date', close: '$data.close' } } } }
], ...);
这种方法的问题是,我返回的文档只包含_id和数据属性[data filtering result is ok],而我需要返回完整的可用属性集
非常感谢您的建议 如果您可以升级到Mongo 3.4(最新的稳定版本),那么可以很好地完成:
db.collection.aggregate([
//预筛选以使数据数组至少具有一个匹配日期
{$match:{{u id:id,'data.date':{$gte:from,$lte:to},
//筛选项目数组
{
$addFields:{
“项目”:{
$filter:{
输入:“$data”,作为:“项”,条件:{
美元及:[
{$gte:[“$$item.date”,from]},
{$lte:[“$$item.date”,收件人]}
]
}
}
}
}
}
]);代码>您的MongoDB服务器版本是什么?您正在运行MongoShell的聚合操作吗?@chridam它说mongod版本:3.2.11,没有,我正在使用的是nodejs驱动程序“MongoDB”:“^2.2.6”,可能是