Javascript Mongoose-如何更新数组中的对象,然后对更新后的数组进行排序?
我有以下文件Javascript Mongoose-如何更新数组中的对象,然后对更新后的数组进行排序?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有以下文件 { "_id": { "$oid": "5bca528b49079d64dd4cea5d" }, "song_queue": [ { "song_id": "best", "vote": 1 }, { "song_id": "west", "vote": 1 } ], "room_id": "FHWAN", "__v": 0 我的问题是,我需要首先更新其中一首歌曲的投票,然后根据投票计数重新排列数组的顺序 我有一种方法可以通
{
"_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_队列中的song,然后在更改后对数组进行排序。无法合并此查询,因为更新参数中的操作顺序不能保证被保留,因此这样的代码可能无法正确运行,因为您无法确定更新song_队列是否正确。$。请投票在排序song_队列之前发生以下情况:
await Room.findOneAndUpdate(
{ "song_queue.song_id": song.song_id },
{
$set: { "song_queue.$.vote": song.votes },
$push: { song_queue: { $each: [], $sort: { vote: -1 } } }
},
{ new: true }
);
优化数据库查询的方法是使用只需要一次往返MongoDB而不是两次往返的操作