我有一个架构,类似于:
read
所有文档都具有唯一的IFS= read -r -d '|' firstCol # see http://mywiki.wooledge.org/BashFAQ/001
firstColWithoutT="${firstCol#T}" # see https://wiki.bash-hackers.org/syntax/pe
printf '%s\n' "$firstColWithoutT" # see http://mywiki.wooledge.org/BashPitfalls#echo_.24foo
。因此,在插入新文档或重新排列现有文档时,所有文档的所有职位都需要同时更新。
要设置/重新排列位置,用户将发送以下内容:
let cat = new Schema({
_id: {type: String, unique: true, default: shortid.generate},
name: {type: String, required: true},
position: {type: Number, required: true}
});
显然,position
的值会有所不同,但这是要点。
我知道我可以做类似的事情:
let newPos = [
{id: 1, position: 4},
{id: 2, position: 2},
{id: 3, position: 3},
{id: 4, position: 1}
];
但是我可以对.updateMany()做同样的事情吗?从文档看来,所有受影响的文档的更新都相同,但我想根据其id
和预定值来修改某些文档。与使用其他计数器相比,确定所有更新何时完成肯定会更容易。
编辑#1
一个(非常)类似的问题是onced asked。最佳答案是使用与我上面描述的类似的newPos.forEach((val) => {
Cat.updateOne({_id: val.id}, {$set: {position: val.position}}, (err, res) => {
...
});
});
,因此这似乎是可行的方法。这就是我要实现的方式,但是请务必提供更好的方法。