_id使用nin()命令不能有效排除相应的数据
发布于 7 年前 作者 jintao 3434 次浏览 来自 问答
  • 当前 Bug 的表现(可附上截图)

一、不加查询条件时,可以检索出48条数据,集合里就只有48条数据,此处是正确的。

二、添加一个搜索条件:ptypeKey:_.nin([‘laikj’,‘wakj’]),检索出来29条记录,这个也是正确的。

三、问题在这里:现在添加了_id的nin命令,没有生效,检索出来的数据还存在对应的两个_id的记录,还是29条记录,这里出错了

  • 预期表现

_id的nin()命令能够有效排除数据。

- 复现路径

const collStep = db.collection('step')
return await collStep.where({
  // _id: _.nin(["5d27ee9578f8e29f4acb73d8","5d27ee9578f8e29f4acb73da"]),
  // ptypeKey:_.nin(['laikj','wakj'])
}).limit(100).orderBy('order', 'asc').get() //生产版使用

- 提供一个最简复现 Demo

在新集合zikupractice中执行nin过滤_id没有问题

个人感觉:可能与_id的版本有关系:

以前导入的数据生成的_id(24位数):(2019-7-1前)step集合

“5d27ee9578f8e29f4acb73d8”,“5d27ee9578f8e29f4acb73da”

现在导入的数据生成的_id(32位数):(2019-7-1后)zikupractice集合

“13dba11c5d2deb9b08fa709c1ec0255d”,“3e1ef27b5d2deb9b08f9297f46557e93”

1 回复

下面例证一下新导入的zikupractice集合_id(32位数)nin()工作是正确的

以下是图例:

不使用nin()命令时,两条记录是可以被检索出来的,下图是正确的:

注意看一下两条记录

“13dba11c5d2deb9b08fa709c1ec0255d”,“3e1ef27b5d2deb9b08f9297f46557e93”

使用nin()命令时,两条记录被排除掉了,_id使用nin()工作是正确的

本题中所说的集合step中_id(24位数)使用nin()是无法正常工作的,确实存在这种情况,请小程序开发组给予重视和处理,谢谢!

回到顶部