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