首页 > 解决方案 > 将 $nin 运算符与 mongoDB 一起使用的正确方法是什么

问题描述

我想在我的 MongoDB 集合中找到与某些过滤器匹配的条目。我的 mongo 集合中的每个条目都类似于以下数据:

{
    type: "admin"
    senderId: "6131e7c597f50700160703fe"
    read_by: [
        {
        Object_id: 614dbbf83ad51412f16c0757
        readerId: "60b968dc5150a20015d6fcae"
        }
    ]
},
{
    type: "admin"
    senderId: "6131e7c597f50700160703fe"
    read_by: [
        {}
    ]
}

我想要正确实现的是过滤集合并仅获取与“admin”匹配的条目作为类型并且在 read_by 数组(即对象数组)中没有当前用户的 ID

我写了这个(并尝试了一些其他有错误的组合:))但它不起作用,最后我得到 0 个条目,但我希望得到两个条目之一,因为第二个它的 read_by 数组为空。

非常感谢!

标签: mongodbmongoose

解决方案


我使用 cloud.mongodb.com 界面验证了我的解决方案,下面最简单的过滤器似乎可以完成这项工作:

{ "read_by.readerId": {$ne:"60b968dc5150a20015d6fcae"}}

仅返回具有空数组的记录。

$nin 运算符也可以正常工作,但如果只有单个值进行比较,那么 $ne 应该就足够了。

{ "read_by.readerId": {$nin: ["60b968dc5150a20015d6fcae"]}}

推荐阅读