mongodb $set —— 自动添加字段

作者:杨润炜
日期:2016/7/7 10:56

mongodb shell操作数据时

在mongodb提供的shell api的情况下,$set操作符很关键。
不用$set,则全用传入的obj直接替换成符合条件的记录,但这在使用update命令且multi为true的条件下是不能执行的。
原始数据:

  1. {
  2. "name": "test",
  3. "age":18
  4. }

数据操作:

  1. db.test.update({name: 'test'}, {age: 11})

or

  1. db.test.findOneAndUpdate({name: 'test'}, {age: 11})

结果:

  1. {
  2. "age":11
  3. }

一般情况下,我们只希望修改指定的属性,而不需要替换整条记录,这时候就需要用$set。
原始数据:

  1. {
  2. "name": "test",
  3. "age":18
  4. }

数据操作:

  1. db.test.update({name: 'test'}, {$set: {age: 11}})

or

  1. db.test.findOneAndUpdate({name: 'test'}, {$set: {age: 11}})

结果:

  1. {
  2. "name": "test",
  3. "age":11
  4. }

使用mongoose操作时

使用mongoose修改记录时,下面两种操作,无论是update还是findOneAndUpdate,加与不加$set操作符,结果都一样。
update:

  1. test.update({name: 'test'}, {existFiled: '123'})

or

  1. test.update({name: 'test'}, {$set: {existFiled: '123'}})

findOneAndUpdate:

  1. test.findOneAndUpdate({name: 'test'}, {existFiled: '123'})

or

  1. test.findOneAndUpdate({name: 'test'}, {$set: {existFiled: '123'}})

结果:

  1. {
  2. "name": "test",
  3. "age":11
  4. "existFiled": '123'
  5. }

总结

使用mongoose的小伙伴要注意咯,它的api名字虽然与mongodb相同,但经过了mongoose自身的处理,所以不能完全对照着mongodb的api来写mongoose的操作。

参考

mongodb $set
mongoose document

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/62.html
邮箱:glowrypauky@gmail.com
QQ: 892413924