gpt4 book ai didi

mongodb - 在单个请求中分组多个 addToSet 请求

转载 作者:可可西里 更新时间:2023-11-01 10:15:22 25 4
gpt4 key购买 nike

我有以下文件:

{
"recordKey": "FOO",
"channels": [{
"id": "CH1",
"blocks": []
}, {
"id": "CH2",
"blocks": []
}]
}

在我当前的用例中,我正在使用 addToSet 运算符执行两个请求,为 channel CH1CH2 添加新 block channel CH1 的示例,我正在这样做:

selector = 
{
"$and" : [ {
"recordKey" : "FOO"
}, {
"channels.id" : "CH1"
} ]
}
addChunkRequest = "$addToSet" : {
"channels.$.blocks" : {
"$each" : [ {
"startime" : 101000000,
"blockType" : "DATA",
"fileLoc" : "/tmp/f1",
"nsamples" : 1000
}

query1 = db.collection.update(selector, update)

我对 CH2 channel 也有同样的想法。现在我想将这两个请求组合到一个请求中。我怎样才能做到这一点?

最佳答案

当然你不能“在一次操作中更新多个数组元素”,因为目前不允许这样做,并且是 positional $ operator 的限制。 .

然而,您“可以”做的是使用 Bulk Operations在“单个请求”中向服务器发出“两个”操作:

var data = [
{
"channel": "CH1",
"blocks": [{
"startime" : 101000000,
"blockType" : "DATA",
"fileLoc" : "/tmp/f1",
"nsamples" : 1000
}]
},
{
"channel": "CH2",
"blocks": [{
"startime" : 202000000,
"blockType" : "DATA",
"fileLoc" : "/tmp/f2",
"nsamples" : 2000
}]
}
]

var ops = data.map(d => ({
"updateOne": {
"filter": { "recordKey": "FOO", "channels.id": d.channel },
"update": {
"$addToSet": { "channels.$.blocks": { "$each": d.blocks } }
}
}
});

db.collection.bulkWrite(ops);

所以它仍然是“两次”操作,这是无法避免的,但是它只是来自服务器的“一次”请求和响应,这实际上对您有很大帮助。

关于mongodb - 在单个请求中分组多个 addToSet 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com