查询指令

eq

表示字段等于某个值。eq 指令接受一个字面量 (literal),可以是 number, boolean, string, object, array

比如筛选出所有自己发表的文章,除了用传对象的方式:

  1. const myOpenID = "xxx"
  2. db.collection('articles').where({
  3. _openid: myOpenID
  4. })

还可以用指令:

  1. const dbCmd = db.command
  2. const myOpenID = "xxx"
  3. db.collection('articles').where({
  4. _openid: dbCmd.eq(openid)
  5. })

注意 eq 指令比对象的方式有更大的灵活性,可以用于表示字段等于某个对象的情况,比如:

  1. // 这种写法表示匹配 stat.publishYear == 2018 且 stat.language == 'zh-CN'
  2. db.collection('articles').where({
  3. stat: {
  4. publishYear: 2018,
  5. language: 'zh-CN'
  6. }
  7. })
  8. // 这种写法表示 stat 对象等于 { publishYear: 2018, language: 'zh-CN' }
  9. const dbCmd = db.command
  10. db.collection('articles').where({
  11. stat: dbCmd.eq({
  12. publishYear: 2018,
  13. language: 'zh-CN'
  14. })
  15. })

neq

字段不等于。neq 指令接受一个字面量 (literal),可以是 number, boolean, string, object, array

如筛选出品牌不为 X 的计算机:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. brand: dbCmd.neq('X')
  6. },
  7. })

gt

字段大于指定值。

如筛选出价格大于 2000 的计算机:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. price: dbCmd.gt(2000)
  5. })

gte

字段大于或等于指定值。

lt

字段小于指定值。

lte

字段小于或等于指定值。

in

字段值在给定的数组中。

筛选出内存为 8g 或 16g 的计算机商品:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. memory: dbCmd.in([8, 16])
  6. }
  7. })

nin

字段值不在给定的数组中。

筛选出内存不是 8g 或 16g 的计算机商品:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. memory: dbCmd.nin([8, 16])
  6. }
  7. })

and

表示需同时满足指定的两个或以上的条件。

如筛选出内存大于 4g 小于 32g 的计算机商品:

流式写法:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. memory: dbCmd.gt(4).and(dbCmd.lt(32))
  6. }
  7. })

前置写法:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. memory: dbCmd.and(dbCmd.gt(4), dbCmd.lt(32))
  6. }
  7. })

or

表示需满足所有指定条件中的至少一个。如筛选出价格小于 4000 或在 6000-8000 之间的计算机:

流式写法:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. price:dbCmd.lt(4000).or(dbCmd.gt(6000).and(dbCmd.lt(8000)))
  6. }
  7. })

前置写法:

  1. const dbCmd = db.command
  2. db.collection('goods').where({
  3. category: 'computer',
  4. type: {
  5. price: dbCmd.or(dbCmd.lt(4000), dbCmd.and(dbCmd.gt(6000), dbCmd.lt(8000)))
  6. }
  7. })

如果要跨字段 “或” 操作:(如筛选出内存 8g 或 cpu 3.2 ghz 的计算机)

  1. const dbCmd = db.command
  2. db.collection('goods').where(dbCmd.or(
  3. {
  4. type: {
  5. memory: dbCmd.gt(8)
  6. }
  7. },
  8. {
  9. type: {
  10. cpu: 3.2
  11. }
  12. }
  13. ))