首页 > 解决方案 > Mongoose $and 过滤器无法正确过滤

问题描述

Mongoose 中的$and运算符在 NodeJS 中无法正常工作。假设我们有这个 JSON-MongoDB 数据:

{ 
    "_id" : ObjectId("60bb4cd74a802722d8b0de0f"), 
    "username" : "System", 
    "text" : "matan has joined!", 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("60bb4cd74a802722d8b0de10"), 
    "username" : "System", 
    "text" : "Welcome!", 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("60bb4cdb4a802722d8b0de11"), 
    "username" : "matan", 
    "text" : "Hello World", 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("60bb4ce14a802722d8b0de12"), 
    "username" : "System", 
    "text" : "matan has left.", 
    "__v" : NumberInt(0)
}

我想过滤所有System's Welcome消息都将被丢弃的数据。例如,将显示此输出:

{ 
    "_id" : ObjectId("60bb4cd74a802722d8b0de0f"), 
    "username" : "System", 
    "text" : "matan has joined!", 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("60bb4cdb4a802722d8b0de11"), 
    "username" : "matan", 
    "text" : "Hello World", 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("60bb4ce14a802722d8b0de12"), 
    "username" : "System", 
    "text" : "matan has left.", 
    "__v" : NumberInt(0)
}

但相反,仅显示此输出:

{
    _id: 60bb4cdb4a802722d8b0de11,
    username: 'matan',
    text: 'Hello World',
    __v: 0
}

这是我的代码(NodeJS):

var msgs = Msg.find({
            $and: [
                { username: {$ne: "System"} },
                { text: {$ne: "Welcome!"} }
            ]
        }, (err, retn) => console.log(retn))

我错过了什么重要的事情吗?谢谢您的帮助。

标签: node.jsmongodbmongoose

解决方案


$and条件将$ne匹配两个字段不应等于值。

你可以试试$or条件,

var msgs = Msg.find({
  $or: [
    { username: { $ne: "System" } },
    { text: { $ne: " Welcome!" } }
  ]
}, (err, retn) => console.log(retn))

操场


推荐阅读