更新指令
set
更新指令。用于设定字段等于指定值。这种方法相比传入纯 JS 对象的好处是能够指定字段等于一个对象:
const dbCmd = db.command
db.collection('photo').doc('doc-id').update({
count: dbCmd.set({
fav: 1,
follow: 1
})
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"name": "Hello",
"count": {
"fav": 0,
"follow": 0
}
}
// 更新后
{
"_id": "xxx",
"name": "Hello",
"count": {
"fav": 1,
"follow": 1
}
}
inc
更新指令。用于指示字段自增某个值,这是个原子操作,使用这个操作指令而不是先读数据、再加、再写回的好处是:
- 原子性:多个用户同时写,对数据库来说都是将字段加一,不会有后来者覆写前者的情况
- 减少一次网络请求:不需先读再写之后的 mul 指令同理。
如给收藏的商品数量加一:
const dbCmd = db.command
db.collection('user').where({
_id: 'my-doc-id'
}).update({
count: {
fav: dbCmd.inc(1)
}
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"name": "Hello",
"count": {
"fav": 0,
"follow": 0
}
}
// 更新后
{
"_id": "xxx",
"name": "Hello",
"count": {
"fav": 1,
"follow": 0
}
}
mul
更新指令。用于指示字段自乘某个值。
以下示例将count内的fav字段乘10
const dbCmd = db.command
db.collection('user').where({
_id: 'my-doc-id'
}).update({
count: {
fav: dbCmd.mul(10)
}
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"name": "Hello",
"count": {
"fav": 2,
"follow": 0
}
}
// 更新后
{
"_id": "xxx",
"name": "Hello",
"count": {
"fav": 20,
"follow": 0
}
}
remove
更新指令。用于表示删除某个字段。如某人删除了自己一条商品评价中的评分:
const dbCmd = db.command
db.collection('comments').doc('comment-id').update({
rating: dbCmd.remove()
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"rating": 5,
"comment": "xxx"
}
// 更新后
{
"_id": "xxx",
"comment": "xxx"
}
push
向数组尾部追加元素,支持传入单个元素或数组
const dbCmd = db.command
db.collection('comments').doc('comment-id').update({
// users: dbCmd.push('aaa')
users: dbCmd.push(['c', 'd'])
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"users": ["a","b"]
}
// 更新后
{
"_id": "xxx",
"users": ["a","b","c","d"]
}
pop
删除数组尾部元素
const dbCmd = db.command
db.collection('comments').doc('comment-id').update({
users: dbCmd.pop()
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"users": ["a","b"]
}
// 更新后
{
"_id": "xxx",
"users": ["a"]
}
unshift
向数组头部添加元素,支持传入单个元素或数组。使用同push
const dbCmd = db.command
db.collection('comments').doc('comment-id').update({
// users: dbCmd.push('aaa')
users: dbCmd.unshift(['c', 'd'])
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"users": ["a","b"]
}
// 更新后
{
"_id": "xxx",
"users": ["c","d","a","b"]
}
shift
删除数组头部元素。使用同pop
const dbCmd = db.command
db.collection('comments').doc('comment-id').update({
users: dbCmd.shift()
}).then(function(res) {
})
// 更新前
{
"_id": "xxx",
"users": ["a","b"]
}
// 更新后
{
"_id": "xxx",
"users": ["b"]
}