Mongo db Aggregate匹配子文档

时间:2015-10-26 19:38:57

标签: node.js mongodb

我正在尝试返回特定用户拥有的所有记录。当我使用终端查询mongodb但是当我尝试通过服务器端节点获取结果时,我可以让它按预期返回值

对象

{ { "_id" : ObjectId("562820793089576b064a4e9c"),
 "record" : ObjectId("562813a2d6f390ec585490bb"),
 "user" : ObjectId("561c00a49ae9f2e340aa3a6b"),
 "AuditItems" : [ ...],
 "AuditType" : [ "update" ],
 "created" : ISODate("2015-10-21T23:32:09.256Z"),
 "__v" : 0 }

当我对终端进行此查询时,我得到了我想要的结果:

db.audits.aggregate([{
    $match:{"user":ObjectId("561c00a49ae9f2e340aa3a6b")}},
    { $group: { _id: {$dateToString: { format: "%m/%d/%Y", date: "$created" }}, dataPoints: {$sum: {$size: "$AuditItems"}} } },
    { $sort: { _id: 1 } 
}])

结果:

{ "_id" : "10/21/2015", "dataPoints" : 4 }
{ "_id" : "10/22/2015", "dataPoints" : 11 }
{ "_id" : "10/24/2015", "dataPoints" : 1 }

然而,当我通过服务器端节点控制器发出此请求时,它返回错误:返回:MongoError:最大调用堆栈大小超出定义

db.audits.aggregate([{
    $match:{"user":req.user}},
    { $group: { _id: {$dateToString: { format: "%m/%d/%Y", date: "$created" }}, dataPoints: {$sum: {$size: "$AuditItems"}} } },
    { $sort: { _id: 1 } 
}])

其中req.user是从路径中查找的对象" / api / user / audits /:userId / edits"

仅供参考我在其他地方使用:userid路径模板成功我也可以简单地删除$ match行并获得成功的响应。我在某种程度上错过了问题:

 $match:{"user":req.user}}, 

1 个答案:

答案 0 :(得分:0)

当然,像往常一样,我发布它的那一刻,我找到了答案:

 $match:{"user":req.user._id}}, 

传递整个对象是不必要的,只需要传递对象的id以匹配它。

感谢收看...