我有一个存储在MongoDB中的数组,我按检索顺序显示并显示该数组,并让用户对其进行处理。这些项目可能完全相同,这意味着什么也没有更改,可以删除某些项目,甚至可能采用不同的顺序。
最后,当它提交给我时,我有一个可用的数组,该数组为我提供了所有ID的列表(mongo自动创建的ID)。如何根据我检索到的仅具有ID的数组重新排列存储在MongoDB中的数组。
如果要举个例子,它像这样存储在Mongo中
components: [
{
"_id": {
"$oid": "5c323c8123f8cb1d1034c16a"
},
"componentName": "Apple"
},
{
"_id": {
"$oid": "5c324a1a79e775435c91a919"
},
"componentName": "Banana"
},
{
"_id": {
"$oid": "5c324a8707eca920fc1d31bc"
},
"componentName": "Orange"
},
{
"_id": {
"$oid": "5c324ace07eca920fc1d31bd"
},
"componentName": "Watermelon"
}]
我得到的数组看起来像这样
["5c324a8707eca920fc1d31bc", "5c324a1a79e775435c91a919"]
意味着第一个和最后一个元素被删除,第二个和第三个元素被交换。所以我想在mongo中修改components数组,使它看起来像这样
components: [
{
"_id": {
"$oid": "5c324a8707eca920fc1d31bc"
},
"componentName": "Orange"
},
{
"_id": {
"$oid": "5c324a1a79e775435c91a919"
},
"componentName": "Banana"
}]
PS。如果您从未使用过MongoDB。只需使用components [1] .id即可访问MongoDB数组中的ID,该ID将为“ 5c323c8123f8cb1d1034c16a”
我真的想不出一种方法来正确地做到这一点,我想到的“ hacky”方法涉及更改一些我已经编写的代码,所以我想知道是否有一种方法可以实现此目标
答案 0 :(得分:0)
也许.populate
方法可以帮助您:
https://mongoosejs.com/docs/populate.html#population
Story.
findOne({ title: 'Casino Royale' }).
populate('author').
exec(function (err, story) {
if (err) return handleError(err);
console.log('The author is %s', story.author.name);
// prints "The author is Ian Fleming"
});
答案 1 :(得分:0)
从用户那里获得ID后, 我将执行以下操作:
通过ID获取数组中的对象。 参考:https://docs.mongodb.com/manual/tutorial/query-arrays/
使用新阵列更新旧阵列。 参考:https://docs.mongodb.com/manual/reference/method/db.collection.update/
答案 2 :(得分:0)
没有用于重新排序的特殊运算符(完整列表为here),但是您可以尝试优化操作数。例如,如果用户仅删除了几个索引,则$unset
的速度将比覆盖速度快。如果发生简单的重新排序,请将$push
与$pull
组合在一起(尽管这将需要两次调用,因为这两个运算符无法在一次更新中访问一个数组)。
通常,我建议获取整个文档并用$set
覆盖整个值;在其他任何情况下,您只要付出大量的努力,就会收获很少。