【发布时间】:2014-09-16 09:15:38
【问题描述】:
场景:考虑存在于 MongoDB 中名为 twitCount 的集合中的文档。
{
"_id" : ObjectId("53d1340478441a1c0d25c40c"),
"items" : [
{
"date" : ISODate("2014-07-22T22:18:05.000Z"),
"value" : 4,
"_id" : ObjectId("53d134048b3956000063aa72")
},
{
"date" : ISODate("2014-07-21T22:09:20.000Z"),
"value" : 10,
"_id" : ObjectId("53d134048b3956000063aa71")
}
...
],
"ticker" : "OM:A1M"
}
我只想获取“items”中的第一个和最后一个日期。我尝试了很多不同的“查询”。但我无法做到正确。 “代码”是独一无二的
以下查询是唯一返回某些内容的查询,但它返回所有内容(这是预期的)。
twitCount.aggregate([{ $match : { ticker: theTicker}} ], function(err, result){
if (err) {
console.log(err);
return;
}
console.log(result)
})
所以,最后我希望查询返回如下内容 [2013-02-01, 2014-07-24]; 我真的需要这方面的帮助,manual/core/aggregation 上的所有链接都是紫色的,我不知道从哪里获得更多信息。
【问题讨论】:
-
我很懒,只会投影整个数组,然后对结果执行移位和弹出 ^.^
-
Mongodb 有一个$pop operator,其中一个例子是删除数组的第一个元素,如果我可以让它工作,我会发布一个实际的答案,但现在玩这个。跨度>
-
还有一个使用 slice 解决类似问题的答案:stackoverflow.com/questions/7223273/…
-
@JakeSellers 您的第一个陈述可能是正确的,但其他两个不适用。
$pop将修改集合中存储的文档,$slice不能在一个查询中同时返回“first”和“last”。因此,选择实际上归结为一个文档的 JavaScript 或解释多个文档的聚合过程。 -
同意,$pop 在阅读文档后立即退出,我花了一些时间玩 $slice 和不同的组合,但无法使其工作。
标签: json node.js mongodb mongoose aggregation-framework