对象数组的猫鼬更改顺序不起作用

时间:2018-10-01 11:21:19

标签: javascript node.js mongodb mongoose

某人Michael拥有favoriteFruits = [ { name: 'Apple'}, {name: 'Banana'} ]

我要更改其顺序

[ { name: 'Apple'}, {name: 'Banana'} ]

[ { name: 'Banana'}, {name: 'Apple'} ]

所以我做到了:

Members.findOne({ name: 'Michael' }, function(err, member){
    member.favoriteFruits = [ {name: 'Banana'}, {name: 'Apple'} ]

    member.save(function (err, result){

        // result is favoriteFruits = [ { name: 'Banana'}, {name: 'Apple'} ]
        // result is correct, but real db's order not changed.

    })
})

即使result的{​​{1}}的顺序是正确的,但是db的顺序也没有改变。顺序不变。

我猜 MongoDB 认为这项工作是无用的,因此它什么也不做。如何更新订单?

1 个答案:

答案 0 :(得分:0)

最有可能的猫鼬没有注意到阵列之间的差异。您可以告诉Mongoose使用Document.prototype.markModified()方法实际上已经修改了该字段。

例如:

Members.findOne({ name: 'Michael' }, function(err, member) {
    member.favoriteFruits = [{ name: 'Banana' }, { name: 'Apple' }];
    member.markModified('favoriteFruits');

    member.save(function (err, result) {

    });
});