【问题标题】:Mongoose - what's going on with the instances of models?Mongoose - 模型实例发生了什么?
【发布时间】:2016-03-31 07:25:22
【问题描述】:

我在 mongoose 中实例化模型时注意到了这个有趣的事情——实例可以通过实例本身以外的其他方式进行更改。这是一个例子:

var articleSchema = new Schema({
    name: 'String',
    price: 'Number'
});

var Article = mongoose.model('Article', articleSchema);

var nexus = new Article({
    name: 'Nexus 5',
    price: 300
});

nexus.save(function(err, instance) {
    instance.name = 'Nexus Five';
    instance.save(function(err, instance2) {
        instance2.name = 'Nexus 5ive';
        instance2.save(function(err, instance3) {
            console.log(nexus.name); //'Nexus 5ive'
        });
    });
});

正如您在示例中看到的,我从未更改过nexusname 属性,而是更改了save 函数在回调中返回的模型的属性。以这种方式更改数据可以吗?还是我应该坚持第一个定义的实例(即nexus 变量)?这似乎有点令人困惑,因为您很容易失去对正在处理的内容的控制。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    save 函数返回一个模型。如果你愿意,你可以继续修改它。

    但是,由于您返回的模型实例将始终与您保存的模型实例完全相同,我无法想象什么时候不继续改变原始模型才是真正有用的。同样的道理,你什么时候会改变原始文档,保存它,再次改变它,然后再次保存它?我没有想出任何我会在你的例子中编写代码的场景。

    如果您使用 new 选项调用 findOneAndUpdate,返回的模型实例突然变得有用,因为它是文档的新副本(可能已被另一个客户端更改)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2012-01-29
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 2019-03-29
      相关资源
      最近更新 更多