我在 MongoDB 中有以下文档。
{
"_id" : ObjectId("521aff65e4b06121b688fabc"),
"user" : "abc",
"servers" : [
{
"name" : "server1",
"cpu" : 4,
"memory" : 4
},
{
"name" : "server2",
"cpu" : 6,
"memory" : 6
},
{
"name" : "server3",
"cpu" : 8,
"memory" : 8
}
]
}
Run Code Online (Sandbox Code Playgroud)
根据某些事件,我必须更新现有服务器的 cpu 和内存字段,或者如果阵列中不存在新服务器,则将其添加到阵列中。目前,我分两步执行此操作。首先检查服务器是否已经存在于数组中。如果是,则更新 cpu 和内存字段。否则,将新的子文档推送到数组中。由于应用程序的多线程性质,有时同一服务器会多次添加到数组中。是否有原子操作符可以执行以下两个操作(类似于$setOnInsert操作符):
注意:$addToSet在上述情况下,运算符不起作用,因为 cpu 或内存的值可能不同。
我有一个票务系统,其中每个票证 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。