收藏
回答

这两种查询方式得到的结果为啥不同?

云函数中使用下面两种查询,得到2种不同的结果。

console.log("--------------------------------")
  const testData = await db.collection('test').where({
    test2: _.eq(1).or(_.eq(2)),
    test1: _.eq(false).or(_.exists(false))
  }).get()
  console.log(testData)
  console.log("--------------------------------")
  const testData2 = await db.collection('test').where(_.and([
    {test2: _.eq(1).or(_.eq(2))},
    {test1: _.eq(false).or(_.exists(false))}, 
  ])).get()
  console.log(testData2)
  console.log("--------------------------------")


打印的日志

--------------------------------
{
  "data": [
    {
      "_id": "28ee4e3e60e71bf828dc9bd62b50045c",
      "test1": true,
      "test2": 1
    },
    {
      "_id": "79550af260e71c48253d51761594d600",
      "test1": true,
      "test2": 2
    }
  ],
  "errMsg": "collection.get:ok"
}
--------------------------------
{
  "data": [],
  "errMsg": "collection.get:ok"
}
--------------------------------


而在云开发控制台中,这两个得到的结果是相同的。



回答关注问题邀请回答
收藏

1 个回答

  • 老张
    老张
    2021-07-09

    建议选第二种。

    第一种会有意料之外的结果。

    2021-07-09
    有用 2
    回复 3
    • 鑫森淼焱垚
      鑫森淼焱垚
      2021-07-09
      从文档里看,这两种是等价的。而且云开发控制台中结果也是相同的。不理解为什么云函数中不行。这算是个bug吧。
      2021-07-09
      回复
    • 老张
      老张
      2021-07-09回复鑫森淼焱垚
      具体原因未深究,目测与安全规则相关。你把安全规则设为双true,两种查询结果就一样了。
      2021-07-09
      回复
    • 老张
      老张
      2021-07-09回复鑫森淼焱垚
      补充一下,可能一样。未深研究,反正如果结果和我想的不一样,我一律改成第二种查询模式。
      2021-07-09
      回复
登录 后发表内容