我有以下文件...
{
"_id": {
"$oid": "5bca528b49079d64dd4cea5d"
},
"song_queue": [
{
"song_id": "best",
"vote": 1
},
{
"song_id": "west",
"vote": 1
}
],
"room_id": "FHWAN",
"__v": 0
我的问题是,我需要首先更新其中一首歌曲的投票,然后根据投票计数重新排列数组的顺序。
我有一种方法可以通过两个单独的查询...
// Give the song an upvote.
await Room.findOneAndUpdate(
{ "song_queue.song_id": song.song_id },
{$set: { "song_queue.$.vote": song.votes }},
{ new: true }
);
// Sort the queue.
room = await Room.findOneAndUpdate(
{ room_id: data.room_id },
{ $push: { song_queue: { $each: [], $sort: { vote: -1 } } } },
{ new: true }
);
是否可以将两个查询合并为一个查询,或者使其更简洁?我想要一个查询来更新song_queue
中的歌曲,然后在更改后对数组进行排序。
答案 0 :(得分:1)
由于无法保证保留update
参数内的操作顺序,因此无法合并此查询,因此这样的代码可能无法正确运行,因为您不确定更新{ {1}}在song_queue.$.vote
排序之前发生:
song_queue
使用Ordered Bulk Write操作可以优化数据库查询,这将使MongoDB往返仅进行一次,而不是两次。