微信小程序云开发之command指令

command查询指令:

在做查询的时候,大部分情况都需要做一些条件查询。在云开发提供的API中,我们可以通过db.command来实现。以下这些指令的操作:

command.eq:
查询筛选条件,表示字段等于某个值。eq指令接受一个字面量 (literal),可以是number,boolean,string, object,array, Date。

比如想要获取作者是北京日报的所有文章:

// 第一种方式,直接通过指定的数据查询:
db.collection("article").where({
    author: "北京日报"
});

// 第二种方式,通过eq指令查询:
const _ = db.command;
db.collection("article").where({
    author: _.eq("北京日报")
});

command.eq与指定数据还是有区别的,比如以下两个作用是不一样的:

// 这种写法表示匹配 stat.publishYear == 2018 且 stat.language == 'zh-CN'
db.collection('articles').where({
  author: {
    name: "今日头条",
    age: 18
  }
})
// 这种写法表示 stat 对象等于 { publishYear: 2018, language: 'zh-CN' }
const _ = db.command
db.collection('articles').where({
  stat: _.eq({
    name: "今日头条",
    age: 18
  })
})

command.neq:
表示字段不等于某个值,和db.command.eq相反。
command.lt:
表示小于某个值。比如查找小于2019/1/1 00:00:00发布的文章:

const _ = db.command;
db.collection("article").where({
  pub_date: _.lt(new Date("2019/1/1 00:00:00"))
});

command.lte:
表示小于或者等于某个值。与command.lt类似。
command.gt:
表示大于某个值。与command.lt类似。
command.gte:
表示大于或者等于某个值。与command.lte类似。
command.in:
查询筛选条件,表示字段的值需在给定的数组内。比如查找北京日报和今日头条两个作者发表的文章:

const _ = db.command;
db.collection("article").where({
  author: _.in(['北京日报','今日头条'])
});

command.nin:
查询筛选条件,表示字段的值需不在给定的数组内。与command.int类似。
command.and:
查询指令,用于表示逻辑 “与” 的关系,表示需同时满足多个查询筛选条件。比如获取发表在2019/1/1 00:00:00和2019/1/1 23:59:59之间的所有文章:

const _ = db.command;
// 普通调用:
db.collection("article").where({
  pub_date: _.and(_.gte(new Date("2019/1/1 00:00:00")),_.lte(new Date("2019/1/1 23:59:59")))
});
// 链式调用:
db.collection("article").where({
  pub_date: _.gte(new Date("2019/1/1 00:00:00")).and(_.lte(new Date("2019/1/1 23:59:59")))
});

command.or:
查询指令,用于表示逻辑 “或” 的关系,表示需同时满足多个查询筛选条件。或指令有两种用法,一是可以进行字段值的 “或” 操作,二是也可以进行跨字段的 “或” 操作。
一个字段的或操作(比如获取时间在2019/1/1 00:00:00前或者2019/1/1 23:59:59后发表的文章):

const _ = db.command;
db.collection("article").where({
 pub_date: _.or(_.lt("2019/1/1 00:00:00"),_gt(new Date("2019/1/1 23:59:59")))
});

跨字段或操作(比如想要获取时间在2019/1/1前,或者是标题中包含今日头条的文章):

 const _ = db.command;
 db.collection("article").where(
   _.or([{
     pub_date: _.lt(new Date("2019/1/1 00:00:00"))
   },{
     title: /今日头条/
   }])
 );

更新指令:
command.set:
更新指令。用于设定字段等于指定值。比如以下是一个文章的数据:

{
  "title": "abc",
  "content": "111",
  "author": {
    "name": "今日头条",
    "age": 18
  }
}

如果我想将这个文章中的author变成{“name”:“今日头条”},那么通过传统的方式是无法实现的:

db.collection("article").doc("id").update({
  data: {
    author: {
      "name": "今日头条"
    }
  }
})

上面这种方式,只是将author.name设置为今日头条,并没有将author的值设置为{name:“今日头条”},也就是说,age:18这个值依然在author中存在。这时候就需要通过set来实现了。示例代码如下:

const _ = db.command;
db.collection("article").doc("id").update({
  data: {
    author: _.set({
      "name": "今日头条"
    })
  }
})

command.remove:
更新指令。用于表示删除某个字段。比如我们想将author这个字段删除,那么就可以调用这个方法。示例代码如下:

const _ = db.command;
db.collection("article").doc("id").update({
  data: {
    author: _.remove()
  }
})

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

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

比如article这个集合中的一条数据有一个read_count字段,想给这个字段加1,那么可以使用以下方式实现:

const _ = db.command
db.collection('article').doc('id').update({
  data: {
    read_count: _.inc(1)
  }
})

command.mul:
自乘指令,跟command.inc一样。
command.push:
更新指令,对一个值为数组的字段,往数组尾部添加一个或多个值。或字段原为空,则创建该字段并设数组为传入值。
比如要给article集合中的某条数据添加标签,那么可以使用以下方式来实现:

const _ = db.command
db.collection('article').doc('id').update({
  data: {
    tags: _.push(['新闻'])
  }
})

command.pop:
更新指令,对一个值为数组的字段,将数组尾部元素删除。
command.shift:
更新指令,对一个值为数组的字段,将数组头部元素删除。
command.unshift:
更新指令,对一个值为数组的字段,往数组头部添加一个或多个值。或字段原为空,则创建该字段并设数组为传入值。

你可能感兴趣的:(微信小程序之云开发,command指令,微信云开发,云数据库command指令)