小编Rav*_*gal的帖子

MongoDB 数组 - 原子更新或推送元素

我在 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操作符):

  1. 如果数组中存在元素,则更新其字段。
  2. 如果数组中不存在元素,则推送新元素。

注意:$addToSet在上述情况下,运算符不起作用,因为 cpu 或内存的值可能不同。

arrays mongodb

5
推荐指数
1
解决办法
3118
查看次数

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

我有一个票务系统,其中每个票证 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。

mongodb mongodb-query

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

mongodb ×2

arrays ×1

mongodb-query ×1