我想创建一个查询,通过该查询可以检查文档是否具有相关文档,例如我有一个文件
{
name:"test1",
status:"CREATED"
date:"2018-12-12"
user:"foo"
}
并且我想检索用户没有status:"OPEN"
我有个想法,要设计一个字段,其中包含为用户和日期打开的文档数量,并为0过滤,但是我不知道该怎么做。
所以当我有以下文件时:
它应该只返回foo2和foo4,因为foo,foo3和foo5已经具有带有status:"OPEN"
的文档
答案 0 :(得分:2)
请找到以下代码,以获取不存在“ OPEN”状态的用户的所有文档:
db.collection.find({
user: {
$nin: db.collection.find({status: 'OPEN'}).map((row) => row.user)
}
});
答案 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中添加一些其他字段以使其更有效的方法