gpt4 book ai didi

javascript - 更新具有不同值的多个文档

转载 作者:IT老高 更新时间:2023-10-28 12:30:31 26 4
gpt4 key购买 nike

我正在使用 jquery ui 的可排序函数 (source) 重新排列元素。我已经构建了自定义回调来创建这些元素的列表。所以当我移动一个元素时,所有元素都会被赋予一个新的位置 id。它可能看起来像这样:

[{
id_of_element_in_database: 12,
new_position: 0
}, {
id_of_element_in_database: 16,
new_position: 1
}, {
id_of_element_in_database: 14,
new_position: 2
}]

我通过简单的 Ajax 发布

将此列表发送到我的后端
$.post('/position', { data: list });

路线

router.post('/position', (req, res) => {
console.log(req.body.data); // This prints the array of objects above.
});

架构

mongoose.Schema({
id: Number,
position: Number,
...
});

现在我不知道如何有效地更改所有文档的位置。创建一个糟糕的数组循环并执行多个数据库请求并不是最好的方法。

我在这里试过了,感觉很不对。

for (let i in req.body.data) {
collection.update({ id: req.body.data[i].id }, { position: req.body.data[i].position });

我必须做些别的事情来实现这一点。我试过谷歌没有任何运气。

最佳答案

你可以试试 bulkWrite API 以更好的方式执行更新,而无需向服务器发出多次请求:

var callback = function(err, r){
console.log(r.matchedCount);
console.log(r.modifiedCount);
}
// Initialise the bulk operations array
var ops = req.body.data.map(function (item) {
return {
"updateOne": {
"filter": {
"id": parseInt(item.id),
"position": { "$ne": parseInt(item.position) }
},
"update": { "$set": { "position": parseInt(item.position) } }
}
}
});

// Get the underlying collection via the native node.js driver collection object
Model.collection.bulkWrite(ops, callback);

关于javascript - 更新具有不同值的多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39082415/

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