首页 > 解决方案 > 为什么 $ne: null 返回空数组?

问题描述

我正在尝试返回具有内容但 $ne: null 或 $exsists: true 仍然返回空数组的数组。

const userSchema = new mongoose.Schema({
email: String, 
password: String, 
googleId: String, 
facebookId: String, 
secret: Array
});

app.get("/secrets", function(req, res) {
User.find({secret: {$ne: null} }, function(err, secrets) {
if (err) {
  console.log(err);
} else {
  if (secrets) {
   console.log(secrets); 
    res.render("secrets", {
      secrets: secrets
    });
   };
  };
 }); 
});

我用谷歌搜索了很多,我知道 $ne: null 会返回每个不存在秘密数组的文档,但如果它是一个空数组,那为什么?任何建议如何克服这个菜鸟问题?我是新来的,请客气!:)

标签: javascriptmongodbmongooseejs

解决方案


这是因为null != []. 您必须明确地写出您的条件来处理这两种情况。

$nin表示不在。因此,查找秘密值不在给定数组中的用户。给定的数组可以保存您的多个值。

User.find({secret: {$nin: [null, [] ] } },...

此外,$exists您甚至可以获得该字段所在的文档null。您将无法获得的唯一文档是完全不存在秘密字段的文档。


推荐阅读