确定猫鼬中空数组和未定义数组之间的区别
Determine difference between empty array and undefined in Mongoose
当使用Mongoose从MongoDB读取时,如何区分空数组和null/未定义的值?猫鼬将两者读取为空数组,但在数据库中,我必须处理这些含义是不同的。
例:
var Mongoose = require('mongoose');
var MongoClient = require('mongodb').MongoClient;
Mongoose.connect('mongodb://localhost/test'); // mongoose
var Demo = Mongoose.model('demo', { names: [String] }, 'demo');
MongoClient.connect('mongodb://localhost/test', function (err, db) {
if (err) return console.error(err);
var collection = db.collection('demo');
// insert undefined array with MongoDB:
collection.insert({}, function(err, status) {
if(err) return console.error(err);
console.log('direct DB:', status.ops[0]);
// retrieve with Mongoose:
Demo.findOne({_id: status.insertedIds[0]}, function(err, doc) {
if(err) return console.error(err);
console.log('Mongoose:', doc);
});
});
});
当我运行此代码时,它会产生以下输出:
direct DB: { _id: 56b07f632390b15c15b4185d }
Mongoose: { names: [], _id: 56b07f632390b15c15b4185d }
因此,Mongoose 设置了一个空数组,从数据库读取时不应该有一个空数组。我已经尝试在 init 后钩子中将名称设置为 undefined,但它没有显示出任何效果。
任何想法我如何将这个 undef 解读为 undef?
猫鼬总是将数组属性初始化为空数组。
您可以检查 names
属性是否存在,以及其length
属性是否未0
:
if (doc.names && doc.names.length) {
// Do something if there is at least one item in the names array.
}
检查通过短路起作用:
- 如果
doc.names
不存在,则结果undefined
是伪造的。这会导致跳过if
块。 - 如果
doc.names
存在并且为真,则 if 块计算doc.names
的长度属性。如果此长度0
或不存在,则if
块中的布尔表达式为 false,并且跳过if
块。
相关文章:
- 用HTML5FileReader填充的Javascript多维数组未定义(但仅在首次使用时!)
- 访问节点js中对象内部的数组-未定义
- 嵌套的“for”循环 - 数组未定义
- Javascript 数组未定义的值
- 我的 JS 数组未定义 x 7 的问题
- JSON 多维数组未显示(“数组未定义”)
- 挖空嵌套模型可观察数组未定义
- 嵌套对象,访问父对象中的对象数组 = 未定义
- 对象的Javascript数组未定义
- Javascript数组未定义..并且I'I’我不知道为什么
- json对象数组未定义错误
- Javascript数组未定义,没有大小
- Javascript全局数组未定义
- JavaScript二维数组未定义
- 控制台显示数组未定义
- $ajax请求不能保存到数组(未定义)
- 为什么我的数组“未定义”?
- JSON数组未定义
- 类型错误:数组未定义
- JSON数据到Javascript数组未定义