为什么 $ne: null 返回空数组?
Why $ne: null returning the empty arrays?
我正在尝试 return 包含内容但 $ne: null 或 $exsists: true 的数组仍然 return 空数组..
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 会 return 每个不存在秘密数组的文档,但如果它是一个空数组,那为什么呢?任何建议如何克服这个菜鸟问题?我是新来的,请客气! :)
这是因为null != []
。
你必须明确地写下你的条件来处理这两个问题。
$nin 表示不在。因此查找秘密值不在给定数组中的用户。给定的数组可以保存您的多个值。
User.find({secret: {$nin: [null, [] ] } },...
此外,使用 $exists
,您甚至可以获得字段为 null
的文档。您唯一得不到的文档是那些根本不存在秘密字段的文档。
如果文档包含 secret
字段的值,其中包括 missing/undefined、null、空数组和填充数组,您有几个选项可以仅匹配填充数组:
{$eval:{$gt:[0,{$size:"$secret"}]}}- get the size for the
secrets`数组,只匹配不为空的数组.
{"secret.0":{$exists:true}}
- 仅当 secret
数组中有第一个元素时才匹配文档(隐式不匹配非数组字段)
如果secret
数组中的元素都是同一类型,则可以使用基于类型的查询。例如,如果秘密数组中的元素是字符串,{"secret.0":{$gte:""}}
将匹配第一个元素是字符串的任何数组。这也可以通过在 {"secret.0":1}
上创建索引来优化
我正在尝试 return 包含内容但 $ne: null 或 $exsists: true 的数组仍然 return 空数组..
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 会 return 每个不存在秘密数组的文档,但如果它是一个空数组,那为什么呢?任何建议如何克服这个菜鸟问题?我是新来的,请客气! :)
这是因为null != []
。
你必须明确地写下你的条件来处理这两个问题。
$nin 表示不在。因此查找秘密值不在给定数组中的用户。给定的数组可以保存您的多个值。
User.find({secret: {$nin: [null, [] ] } },...
此外,使用 $exists
,您甚至可以获得字段为 null
的文档。您唯一得不到的文档是那些根本不存在秘密字段的文档。
如果文档包含 secret
字段的值,其中包括 missing/undefined、null、空数组和填充数组,您有几个选项可以仅匹配填充数组:
{$eval:{$gt:[0,{$size:"$secret"}]}}- get the size for the
secrets`数组,只匹配不为空的数组.
{"secret.0":{$exists:true}}
- 仅当secret
数组中有第一个元素时才匹配文档(隐式不匹配非数组字段)如果
上创建索引来优化secret
数组中的元素都是同一类型,则可以使用基于类型的查询。例如,如果秘密数组中的元素是字符串,{"secret.0":{$gte:""}}
将匹配第一个元素是字符串的任何数组。这也可以通过在{"secret.0":1}