我可能对 mongodb 聚合框架管道的工作方式有一个基本的误解。我的期望是每一步都会消耗前一步的输出。这是一个使用http://media.mongodb.org/zips.json提供的示例集合的具体示例:
> db.zipcodes.aggregate({$match:{state:"CA"}});
产生这样的结果。
{
"city" : "TRUCKEE",
"loc" : [
-120.295031,
39.319321
],
"pop" : 199,
"state" : "CA",
"_id" : "96162"
}
到目前为止,一切都很好。然后我决定通过运行添加另一个步骤来获得上述投影:
> db.zipcodes.aggregate({
$match:{state:"CA"},
$project: {city: 1, pop: 1, state: 1}
});
投影有效,但忽略了第一个 $match 步骤。它基于原始输入,并包含 state != CA 的文档:
{
"city" : "THAYNE",
"pop" : 505,
"state" : "WY",
"_id" : "83127"
}
是我的期望错位了,还是我一直盯着语法问题而没有看到它?我正在运行 2.2.0 版:
> db.version();
2.2.0
示例查询似乎有效。
提前致谢。