Arrays MongoDB更新数组(拉取所有匹配元素并拉取一个匹配元素)

Arrays MongoDB更新数组(拉取所有匹配元素并拉取一个匹配元素),arrays,json,mongodb,atomic,bson,Arrays,Json,Mongodb,Atomic,Bson,我目前正在MongoDB文档中编写一个availabilities系统,但我似乎不知道如何在一个请求中使我的特定更新(提取一个元素和所有元素,具体取决于数组)成为原子(需要这样做) 文档有一个slots对象,该对象包含服务,每个服务都包含要拾取和提取的插槽。看起来是这样的: { "dayId": 21055, "modificationId": { "$oid": "6036f8c341b05c

我目前正在MongoDB文档中编写一个availabilities系统,但我似乎不知道如何在一个请求中使我的特定更新(提取一个元素和所有元素,具体取决于数组)成为原子(需要这样做)

文档有一个slots对象,该对象包含服务,每个服务都包含要拾取和提取的插槽。看起来是这样的:

{
    "dayId": 21055,
    "modificationId": {
        "$oid": "6036f8c341b05c730a93439f"
    },
    "slots": {
        "serviceA": [{
            "startDate": {
                "$date": "2021-02-23T10:00:00.000Z"
            },
            "endDate": {
                "$date": "2021-02-23T12:00:00.000Z"
            },
            "duration": 120
        }],
        "serviceB": [{
            "startDate": {
                "$date": "2021-02-23T10:00:00.000Z"
            },
            "endDate": {
                "$date": "2021-02-23T11:00:00.000Z"
            },
            "duration": 60
        }, {
            "startDate": {
                "$date": "2021-02-23T11:00:00.000Z"
            },
            "endDate": {
                "$date": "2021-02-23T12:00:00.000Z"
            },
            "duration": 60
        }],
        "serviceC": [{
            "startDate": {
                "$date": "2021-02-23T10:00:00.000Z"
            },
            "endDate": {
                "$date": "2021-02-23T10:30:00.000Z"
            },
            "duration": 30
        }, {
            "startDate": {
                "$date": "2021-02-23T10:30:00.000Z"
            },
            "endDate": {
                "$date": "2021-02-23T11:00:00.000Z"
            },
            "duration": 30
        }, {
            "startDate": {
                "$date": "2021-02-23T11:30:00.000Z"
            },
            "endDate": {
                "$date": "2021-02-23T12:00:00.000Z"
            },
            "duration": 30
        }]
    }
}
问题是,一些服务需要根据其日期和持续时间上的复杂条件删除其所有元素,除了一个服务,只有第一个条件匹配元素

我想到了这个(持续时间相等通常被$lte、$gte等所取代)

对于更复杂的情况,我打算这样做,但日期也/相反(似乎效果很好):

因此,我希望服务A和服务B提取所有匹配元素,例如,服务C只提取一个匹配元素

提前感谢您的帮助

db.availabilities.update(
  { "_id": ObjectId("6037396b41b057730a8343a3") },
  { $pull: { "slots.serviceA": { duration: 120 },
 "slots.serviceB": { duration: 60 },
 "slots.serviceC": { duration: 30 } } 
}
);
"slots.serviceC": { $and: [ { "duration": { $gte: 30 } }, { "duration": { $lte: 60 } } ] }