gpt4 book ai didi

angularjs - 使用 MongoDB db.collection.aggregate 的结果从 db.collection.find 中排除结果

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:22 25 4
gpt4 key购买 nike

我正在 AngularJS 和 Node 中编写一个 MongoDB 函数,并且我有一个集合,其中有一个名为 documentId 的字段,该字段不是唯一的。我想找到该集合中的所有文档,其中特定文档的状态字段都不包含“打开”一词,并且仅包含所有状态都为“已关闭”或“已取消”的文档。

例如:

_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"

我希望我的结果仅包含 documentId 002,而不包含 documentId 001,因为 documentId 001 的文档之一包含打开状态。但由于 documentId 002 的所有文档的状态均为已关闭或已取消,因此我想将其包含在结果中。

我可以使用以下命令获取要从 db.collection.find() 中排除的文档的聚合...

db.tickets.aggregate(
[
{
"$match" : {
"companyId" : "CO-000001",
"$and" : [
{
"status" : {
"$in" : [
"open","on hold"
]
}
}
]
}
},
{
"$group" : {
"_id" : null,
"uniqueValues" : {
"$addToSet" : "$documentId"
}
}
}
],
{
"allowDiskUse" : false
}

);

但现在我想在执行我的操作时使用查询中聚合的数组结果...

db.tickets.find("companyId":"CO-000001", $and:[{documentId:{$nin:[<results from aggregation>]}}])

有没有办法在另一个查询中使用聚合结果?或者有没有办法在聚合中完成所有这些?

最佳答案

根据您的需要更改投影。观察我后面如何利用小组和比赛阶段来获取所需的数据。希望这能解决您的问题。

 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();

关于angularjs - 使用 MongoDB db.collection.aggregate 的结果从 db.collection.find 中排除结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49536549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com