【问题标题】:Mongoose Change Order of Array of Objects not working对象数组的猫鼬更改顺序不起作用
【发布时间】:2019-03-06 11:56:17
【问题描述】:

有一个人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.

    })
})

即使resultfavoriteFruits的顺序是正确的,但是db的顺序并没有改变。顺序没有改变。

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

【问题讨论】:

  • 数组应该保持顺序。
  • 除了结果问题,为什么你不使用findOneAndUpdate 而不是两个单独的查询?
  • @AnkitAgarwal 那么有没有办法实现呢?
  • @Ved 有时我使用,有时不使用。尤其是当我必须处理查询数据时。
  • @AnkitAgarwal 也许我应该添加另一个键值对,例如 [{ name: 'Banana', index: 0, { name: 'Apple', index: 1 }] 并按索引排序...?我希望会有更简单的方法....

标签: javascript node.js mongodb mongoose


【解决方案1】:

Mongoose 很可能没有注意到数组之间的差异。您可以使用 Document.prototype.markModified() 方法告诉 Mongoose 该字段实际上已被修改。

你的例子:

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

    member.save(function (err, result) {

    });
});

【讨论】:

    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2018-03-03
    • 2016-11-03
    • 2017-02-24
    • 2018-05-14
    相关资源
    最近更新 更多