猫鼬:聚合与$ match匹配“_id.property”

时间:2013-06-19 19:25:24

标签: node.js mongodb mongoose aggregation-framework

在具有此结构的文档的mongo(2.4.x)集合中:

db.col.insert({ "_id" : { "owner" : "john" }, "value" : 10 });
db.col.insert({ "_id" : { "owner" : "mary" }, "value" : 20 });

我正在使用mongoose(3.5.4)并尝试运行聚合管道而没有成功。这可以从mongo命令行客户端正常工作:

> db.col.aggregate({ $match : { "_id.owner": "john" } });

{ "result" : [ { "_id" : { "owner" : "john" }, "value" : 10 } ], "ok" : 1 }

当我使用mongoose 时,它无法按预期工作:

Col.aggregate(
  { $match : { "_id.owner": "john" } },
  function(err, result) {
    console.log("ERR : " + err + " RES : " + JSON.stringify(result));
  }
);

ERR : null RES : []

这是我正在使用的猫鼬模式:

var Col = new Schema({
  _id: {
    owner: String
  },
  value: Number
});

我必须说一个简单的Col.find({ "_id.owner": "john" })按预期工作。

我怎么能让它起作用?我无法修改文档的结构。

1 个答案:

答案 0 :(得分:0)

在我解决方法之前,我在比赛前加入了$项目,但我仍在寻找更清洁的解决方案:

{
  $project: {
    "_id": 0,
    "owner": "$_id.owner",
    "value": 1
  }
}