猫鼬什么时候改变
Mongoose __v when does it change
根据http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning,版本字段__v应该在数组元素被移出其原始位置时发生变化。
我运行一个测试代码(Mongoose版本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条,这将对数组进行破坏性更改。为什么版本没有增加?
这篇文章的作者不是很清楚版本增量何时在内部应用,因为当您使用update命令时,您会发现版本字段没有更新。
如果你将update命令替换为Mongoose pull方法,版本字段将被增加:
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方法
相关文章:
- 我什么时候应该把JSON分成更小的部分
- 应该在什么时候使用Javascript条件运算符
- 你什么时候用_.bind和_.bindAll
- 我怎么知道用户什么时候点击了类似Facebook的按钮
- 什么时候在流中的类型别名上使用接口
- 什么时候可以对条件参数使用管道运算符?-JavaScript
- 在 React JS 中,什么时候应该使用存储而不是直接操作视图的状态
- 什么时候字符串不是字符串?当它没有 include() 方法时
- 什么时候需要在javascript中的函数中将对象作为参数传递
- 命令行上的输入在什么时候解析为 node.js 中的 process.argv
- $http在什么时候触发摘要循环开始
- 什么时候函数只能调用一次
- 我什么时候应该在jQuery中使用$.fn.extend()
- 什么时候会如果else打破所有条件javascript
- 我们什么时候应该在角度指令中使用transclude
- 我什么时候才能知道我已经在indexedDB中打开了连接
- dojo中的require()和define()函数的主要区别是什么?我们什么时候使用它们
- 猫鼬什么时候改变
- 什么时候在谷歌浏览器标签的tabId改变
- 什么时候jquery改变函数触发