MongoDB 查询根据某些字段值排除记录

Rav*_*gal 4 mongodb mongodb-query

我有一个票务系统,其中每个票证 ID 都有多个版本/文档。当票证的最后一个文档状态=已关闭时,该票证被视为已关闭。我需要找出所有开放的门票。以下是 SQL 中的查询:

select distinct(id) from tickets where id not in (select id from tickets where status = 'closed');
Run Code Online (Sandbox Code Playgroud)

MongoDB 中对应的查询是什么?

以下是一份票据文件的样本。

{
    "id" : 100,
    "timestamp": 1427863300000,
    "status" : "open",
    "description": "abc",
    "comments": "pqr"
    "assigned_to": "xyz"
}
Run Code Online (Sandbox Code Playgroud)

可能有多个文档具有相同的票证 ID。这样做是为了维护票证的历史记录。该应用程序允许用户以历史模式查看票证详细信息。当具有相同 id 但状态为“已关闭”的文档插入到数据库中时,将考虑该票证。

{
    "id" : 100,
    "timestamp": 1429200480000,
    "status" : "closed",
    "description": "abc",
    "comments": "pqr"
    "assigned_to": "xyz"
}
Run Code Online (Sandbox Code Playgroud)

我想查询在任何文档中都没有 status=close 的不同工单 ID。

sty*_*ane 5

你需要使用该db.collection.distinct()方法。要检索“状态”不是“已关闭”的文档的“id”,您需要使用$ne运算符。

db.collection.distinct( 'id', { 'status': { '$ne': 'closed' } } )
Run Code Online (Sandbox Code Playgroud)