更新指令

set

更新指令。用于设定字段等于指定值。这种方法相比传入纯 JS 对象的好处是能够指定字段等于一个对象:

  1. const dbCmd = db.command
  2. db.collection('photo').doc('doc-id').update({
  3. count: dbCmd.set({
  4. fav: 1,
  5. follow: 1
  6. })
  7. }).then(function(res) {
  8. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "name": "Hello",
  5. "count": {
  6. "fav": 0,
  7. "follow": 0
  8. }
  9. }
  10. // 更新后
  11. {
  12. "_id": "xxx",
  13. "name": "Hello",
  14. "count": {
  15. "fav": 1,
  16. "follow": 1
  17. }
  18. }

inc

更新指令。用于指示字段自增某个值,这是个原子操作,使用这个操作指令而不是先读数据、再加、再写回的好处是:

  • 原子性:多个用户同时写,对数据库来说都是将字段加一,不会有后来者覆写前者的情况
  • 减少一次网络请求:不需先读再写之后的 mul 指令同理。

如给收藏的商品数量加一:

  1. const dbCmd = db.command
  2. db.collection('user').where({
  3. _id: 'my-doc-id'
  4. }).update({
  5. count: {
  6. fav: dbCmd.inc(1)
  7. }
  8. }).then(function(res) {
  9. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "name": "Hello",
  5. "count": {
  6. "fav": 0,
  7. "follow": 0
  8. }
  9. }
  10. // 更新后
  11. {
  12. "_id": "xxx",
  13. "name": "Hello",
  14. "count": {
  15. "fav": 1,
  16. "follow": 0
  17. }
  18. }

mul

更新指令。用于指示字段自乘某个值。

以下示例将count内的fav字段乘10

  1. const dbCmd = db.command
  2. db.collection('user').where({
  3. _id: 'my-doc-id'
  4. }).update({
  5. count: {
  6. fav: dbCmd.mul(10)
  7. }
  8. }).then(function(res) {
  9. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "name": "Hello",
  5. "count": {
  6. "fav": 2,
  7. "follow": 0
  8. }
  9. }
  10. // 更新后
  11. {
  12. "_id": "xxx",
  13. "name": "Hello",
  14. "count": {
  15. "fav": 20,
  16. "follow": 0
  17. }
  18. }

remove

更新指令。用于表示删除某个字段。如某人删除了自己一条商品评价中的评分:

  1. const dbCmd = db.command
  2. db.collection('comments').doc('comment-id').update({
  3. rating: dbCmd.remove()
  4. }).then(function(res) {
  5. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "rating": 5,
  5. "comment": "xxx"
  6. }
  7. // 更新后
  8. {
  9. "_id": "xxx",
  10. "comment": "xxx"
  11. }

push

向数组尾部追加元素,支持传入单个元素或数组

  1. const dbCmd = db.command
  2. db.collection('comments').doc('comment-id').update({
  3. // users: dbCmd.push('aaa')
  4. users: dbCmd.push(['c', 'd'])
  5. }).then(function(res) {
  6. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "users": ["a","b"]
  5. }
  6. // 更新后
  7. {
  8. "_id": "xxx",
  9. "users": ["a","b","c","d"]
  10. }

pop

删除数组尾部元素

  1. const dbCmd = db.command
  2. db.collection('comments').doc('comment-id').update({
  3. users: dbCmd.pop()
  4. }).then(function(res) {
  5. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "users": ["a","b"]
  5. }
  6. // 更新后
  7. {
  8. "_id": "xxx",
  9. "users": ["a"]
  10. }

unshift

向数组头部添加元素,支持传入单个元素或数组。使用同push

  1. const dbCmd = db.command
  2. db.collection('comments').doc('comment-id').update({
  3. // users: dbCmd.push('aaa')
  4. users: dbCmd.unshift(['c', 'd'])
  5. }).then(function(res) {
  6. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "users": ["a","b"]
  5. }
  6. // 更新后
  7. {
  8. "_id": "xxx",
  9. "users": ["c","d","a","b"]
  10. }

shift

删除数组头部元素。使用同pop

  1. const dbCmd = db.command
  2. db.collection('comments').doc('comment-id').update({
  3. users: dbCmd.shift()
  4. }).then(function(res) {
  5. })
  1. // 更新前
  2. {
  3. "_id": "xxx",
  4. "users": ["a","b"]
  5. }
  6. // 更新后
  7. {
  8. "_id": "xxx",
  9. "users": ["b"]
  10. }