我有一个MongoDB聚合,如下所示:
[
{
"$match": [
{"Created": {"$gte": ISODate("2014-01-10T00:00:00Z")}}
]
},
{
"$group":
{
"_id": [
{"year": {"$year": "Created"}},
{"month": {"$month": "Created"}},
{"day": {"$dayOfMonth": "Created"}}
],
"count": {"$sum": 1}
}
}
]
当我在MongoVUE中运行此查询时,它会返回以下错误:
Incorrect syntax in pipeline Each item in the pipeline must be a document Type: System.Exception Stack: at MangoUI.ComAggregate.kRemove_Click(Object sender, EventArgs e)
我完全被难倒了,而且从我的谷歌搜索中,其余的整个互联网也是如此。在我添加创建日期$ match运算符之前,查询工作正常。错误可能属于MongoVUE而不是MongoDB本身。
架构的相关部分如下所示:
{
"_id" : new BinData(3, "m13wFpp9gUi09cRCuG43aw=="),
"Created" : ISODate("2013-12-19T01:00:20.972Z")
}
有人能帮我找到这个错误的原因吗?我害怕我完全被难倒了。
我不被允许回答我自己的问题(因为如果你的StackOverflow信誉太低,显然在8小时内找到答案是完全不可能的?嗯?)所以我发布以下答案:
好的,我找到了答案,据我所知,它确实是MongoVUE中的一个错误(或者至少是一个遗漏和误导性的错误消息)。以这种方式编写相同的查询(使用orid的修改):
{
"$match": {
"Created": {
"$gte": ISODate("2014-01-10T00:00:00Z")
}
}
},
{
"$group": {
"_id": {
"year": {
"$year": "$Created"
},
"month": {
"$month": "$Created"
},
"day": {
"$dayOfMonth": "$Created"
}
},
"count": {
"$sum": 1
}
}
}
(注意我真正做的唯一改变是删除它周围的数组标记。)
此外,在MongoVUE中,您在一个数组中放置了多个操作的聚合任何时出现该错误。如果你离开阵列,操作工作正常。如果你添加它,突然你会得到“管道中的每个项目都必须是文档。”
答案 0 :(得分:1)
pipeline = [{
"$match": {
"Created": {
"$gte": ISODate("2014-01-10T00:00:00Z")
}
}
},
{
"$group": {
"_id": {
"year": {
"$year": "$Created"
},
"month": {
"$month": "$Created"
},
"day": {
"$dayOfMonth": "$Created"
}
},
"count": {
"$sum": 1
}
}
}]
Document.objects.aggregate(*pipeline)