我正在编写AngularJS和Node中的MongoDB函数,我有一个集合,其中有一个名为documentId的字段,它不是唯一的。我想找到该集合中的所有文档,其中特定文档的NONE状态字段包含单词open,并且仅包含所有状态的文档'是"关闭"或"取消"。
例如:
IOLoop.spawn_callback
我希望我的结果只包含documentId 002而不包含documentId 001,因为其中一个文档包含documentId 001,其状态为open。但由于所有带有documentId 002的文档都处于关闭或取消状态,我希望将其包含在我的结果中。
我可以使用以下内容获取我想要从db.collection.find()中排除的文档的聚合...
Unlike all other callback-related methods on IOLoop, spawn_callback does not associate the callback with its caller’s stack_context
);
但现在我想在执行my ...
时在查询中使用聚合的数组结果_id: <val> , companyId : "CO-000001", documentId : "001", status:"closed", value:"123.45"
_id: <val> , companyId : "CO-000001", documentId : "002", status:"closed", value:"323.67"
_id: <val> , companyId : "CO-000001", documentId : "001", status:"open", value:"434.56"
_id: <val> , companyId : "CO-000001", documentId : "002", status:"canceled", value:"523.16"
有没有办法在另一个查询中使用聚合的结果?或者有没有办法在聚合中完成所有这些?
答案 0 :(得分:0)
根据您的需要更改投影。观察我以后如何使用组和匹配阶段来获取所需的数据。希望这能解决你的问题。
db.tickets.aggregate(
[
{
"$match" : {
"companyId" : "CO-000001"
}
},
{
"$group" : {
"_id" : "$documentId",
"status" :{
"$addToSet" : "$status"
}
}
},
{
$match:{ status:{$nin:["open","on hold"]} }
},{
$lookup:{
from:"tickets",
as: "final",
localField: "_id",
foreignField: "documentId",
}
},
{
$project :{
_id:0,
final:1
}
}
],
{
"allowDiskUse" : false
}
).pretty();