Node.js 检查mongo数据密钥是否存在
我有一些产品数据,其中一些产品没有关键的“图像。封面”。 现在,当我尝试打印所有数据时,它显示错误 无法读取未定义的属性“cover”Node.js 检查mongo数据密钥是否存在,node.js,mongodb,Node.js,Mongodb,我有一些产品数据,其中一些产品没有关键的“图像。封面”。 现在,当我尝试打印所有数据时,它显示错误 无法读取未定义的属性“cover” 所以我试着让images.cover键不存在,然后把var cover=''其他图像。封面值。我正在使用错误消息中的nodejs和mongodb: 无法读取未定义的属性“cover” 您可以将故障产品文档上的错误源缩小为以下三个属性之一: 文档没有图像字段(因此是未定义的对象) 图像字段可能为空,并且 盖键也可能不存在 让我们考虑一个最小的测试用例,其中一个示例
所以我试着让images.cover键不存在,然后把
var cover=''代码>其他图像。封面
值。我正在使用错误消息中的nodejs和mongodb:
无法读取未定义的属性“cover”
您可以将故障产品文档上的错误源缩小为以下三个属性之一:
文档没有图像
字段(因此是未定义的对象)
图像
字段可能为空,并且
盖
键也可能不存在
让我们考虑一个最小的测试用例,其中一个示例集合有三个以上的文档,其中的代码为<代码>。
db.product.insert([
/* 0 */
{
"_id" : 1,
"image" : {
"cover" : "test1",
"url" : "url1"
}
},
/* 1 */
{
"_id" : 2,
"image" : {
"url" : "url2"
}
},
/* 2 */
{
"_id" : 3
},
/* 3 */
{
"_id" : 4,
"image" : {
"cover" : null,
"url" : "url4"
}
}
]);
在MongoShell中,您可以通过使用本机JavaScript方法或mongodb的运算符来检查密钥是否存在。对于前者,您可以尝试:
var cover = "", covers = [];
db.product.find().forEach(function (doc){
var cover = "";
if ((doc.image !== undefined) && (typeof(doc.image.cover) !== "undefined") && (doc.image.cover !== undefined)){
cover = doc["image"].cover;
}
covers.push(cover);
});
print(covers); /* will print to mongo shell:
{
"0" : "test1",
"1" : "",
"2" : "",
"3" : null
}
*/
使用其值设置为true
的运算符,搜索包含字段的文档,包括字段值为null的文档。因此,在您的示例中,使用此路由可能不起作用,因为您还希望为不匹配的文档分配covers变量:
var cover = "", covers = [];
db.product.find({ "image.cover": {$exists : true} }).forEach( function(doc) {
covers.push(doc["image"].cover);
});
print(covers); /* this will print to mongo shell:
{
"0" : "test1",
"1" : null
}
*/
just write if(images.cover!==未定义){//do here}else{var cover='';}的可能重复项