mongo db查询检查是否没有其他具有匹配值的文档

时间:2018-12-12 07:21:07

标签: javascript mongodb mongodb-query

我想创建一个查询,通过该查询可以检查文档是否具有相关文档,例如我有一个文件

{
name:"test1", 
status:"CREATED"
date:"2018-12-12"
user:"foo"
}

并且我想检索用户没有status:"OPEN"

的所有文档

我有个想法,要设计一个字段,其中包含为用户和日期打开的文档数量,并为0过滤,但是我不知道该怎么做。

所以当我有以下文件时:

enter image description here

它应该只返回foo2和foo4,因为foo,foo3和foo5已经具有带有status:"OPEN"的文档

2 个答案:

答案 0 :(得分:2)

请找到以下代码,以获取不存在“ OPEN”状态的用户的所有文档:

db.collection.find({
  user: {
    $nin: db.collection.find({status: 'OPEN'}).map((row) => row.user)
  }
});
  • $ nin:指定和排除列表。
  • .map((row)=> row.user):将过滤后的文档数组转换为仅包含用户ID的字符串数组。

答案 1 :(得分:0)

这是逻辑:

1。首先查询状态为OPEN的所有文档

2。现在您有了一组仅具有OPEN doc的数据

4。现在创建一个查询,在该查询中传递此集合的所有userId并从集合中获取userId不等于传递的值的那些值

示例:

db.collectionName.find({status:'OPEN'});// set1


db.collectionName.find({userId:{$not : 'userid1'}},{userId:{$not : 'userid2'}},....);

这不是很好的代码,但这就是您现在所能做的或在db中添加一些其他字段以使其更有效的方法