猫鼬__v什么时候改变

拥抱

根据http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning,版本字段__v假定在数组元素移出其原始位置时发生更改。

我运行测试代码(猫鼬版本3.8.15):

var mongoose = require('mongoose');

var db = mongoose.connection;
mongoose.connect('mongodb://localhost:27017/node_test');
db.on('error', console.error.bind(console, 'connection error:'));

var testSchema = mongoose.Schema({
  name: String,
  arr: [Number]
})
var Test = mongoose.model('Test', testSchema);

var t = Test();
t.name = 'hi'
t.arr = [1, 2, 3, 4, 5, 6];
t.save(function (err, result) {
  console.log(result)
  Test.update({'name': 'hi'}, {$pull: {'arr': 3}}, function(err2, result2) {
    console.log(result2)
    Test.find({'name': 'hi'}, function(err3, result3) {
      console.log(result3);
      db.close();
    });
  });
});

输出:

{ __v: 0,
  name: 'hi',
  _id: 53f594a0113832871c2eea89,
  arr: [ 1, 2, 3, 4, 5, 6 ] }
1
[ { _id: 53f594a0113832871c2eea89,
    name: 'hi',
    __v: 0,
    arr: [ 1, 2, 4, 5, 6 ] } ]

因此,删除了数字3,如果有任何代码要尝试通过其索引位置访问它,则会对数组造成破坏性变化。为什么版本不增加?

克里斯蒂安·P

本文的作者不清楚何时在内部应用版本增量,因为您发现使用update命令时版本字段未更新。

如果您在阵列上用Mongoose pull方法替换update命令,则版本字段将增加:

var t = Test();
t.name = 'hi'
t.arr = [1, 2, 3, 4, 5, 6];

t.save(function (err, result) {
    console.log(result);

    // use Mongoose pull method on the array
    t.arr.pull(3);

    t.save(function(err2, result2) {
        console.log(result2)
    });
});

结果:

{ __v: 0,
  name: 'hi',
  _id: 53f59d2a6522edb12114b98c,
  arr: [ 1, 2, 3, 4, 5, 6 ] }
{ __v: 1,
  name: 'hi',
  _id: 53f59d2a6522edb12114b98c,
  arr: [ 1, 2, 4, 5, 6 ] }

编辑:

该模型上的update方法基本上只构建并执行查询。使用save方法时,将完成版本检查/递增

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

猫鼬__v什么时候改变

来自分类Dev

什么时候重构?

来自分类Dev

什么时候解密?

来自分类Dev

什么时候可以访问实际的v表?

来自分类Dev

本身不是问题,但是3.4中的gnome动态壁纸什么时候改变?

来自分类Dev

本身不是问题,但是3.4中的gnome动态壁纸什么时候改变?

来自分类Dev

什么时候测试什么?

来自分类Dev

SynchronizationContext,什么时候流动,什么时候不流动?

来自分类Dev

什么时候使用数组,什么时候使用对象?

来自分类Dev

grep什么时候计数,什么时候不计数

来自分类Dev

K 什么时候是 1024,什么时候是 1000?

来自分类Dev

什么时候用xib,什么时候用ContainerView?

来自分类Dev

什么时候用 :: 什么时候用 . 在锈?

来自分类Dev

Ubuntu 18.04 什么时候发布,什么时候发布?

来自分类Dev

什么时候使用GPU?

来自分类Dev

什么时候使用WeakReference?

来自分类Dev

什么时候使用常数?

来自分类Dev

什么时候绑定VAO?

来自分类Dev

指针什么时候惯用的?

来自分类Dev

什么时候需要CAMLparamX?

来自分类Dev

什么时候尊重preferredContentSize?

来自分类Dev

cout什么时候冲洗?

来自分类Dev

什么时候声明对象?

来自分类Dev

线程什么时候空闲?

来自分类Dev

什么时候出现StackOverflowError?

来自分类Dev

什么时候使用shellout?

来自分类Dev

recv()什么时候返回?

来自分类Dev

什么时候不是ScriptBlock?

来自分类Dev

什么时候使用offsetdescendantrecttomycoords?