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

标签 angularjs node.js mongodb

我正在 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/

相关文章:

node.js - node js - 我在使用 JSON.parse() 时遇到了一些问题

c# - MongoDB c# 驱动程序使用 upsert 和 updateMany

mongodb - 对于小型 .NET 应用程序,什么是好的数据库选择?

mysql - angularJS过滤器 "orderBy"无法对3位以上的数字进行排序

javascript - 调试 Angular 资源 promise

angularjs 指令的 '$element' 是一个注释,因为 ng-if

ruby-on-rails - 数组的未定义方法 `serializable_hash'

javascript - 仅当 src 发生更改时才运行构建

Node.js 在 typeorm 的实体中添加 created_at 和 updated_at

javascript - 使用Python脚本的Heroku Node.js