gpt4 book ai didi

javascript - 确定 Mongoose 中空数组和未定义数组之间的区别

转载 作者:可可西里 更新时间:2023-11-01 09:40:18 27 4
gpt4 key购买 nike

在使用 Mongoose 从 MongoDB 中读取数据时,如何区分空数组和空值/未定义值? Mongoose 将两者都读取为一个空数组,但在数据库中我必须使用它们的含义是不同的。

示例:

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 在从数据库读取时设置了一个空数组,该数组不应该存在。我已经尝试在 post init Hook 中将 name 设置为 undefined,但它没有显示任何效果。

有什么想法可以将这个 undef 读作 undef 吗?

最佳答案

Mongoose 总是将数组属性初始化为空数组。

您可以检查 names 属性是否存在以及它的 length 属性是否不是 0:

if (doc.names && doc.names.length) {
// Do something if there is at least one item in the names array.
}

检查通过短路进行:

  1. 如果 doc.names 不存在,则结果为 undefined,这是假的。这会导致跳过 if block 。
  2. 如果 doc.names 存在且为真,则 if block 评估 doc.names 的长度属性。如果此长度为 0 或不存在,则 if block 中的 bool 表达式为 false 并跳过 if block 。<

关于javascript - 确定 Mongoose 中空数组和未定义数组之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35150459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com