Node.js 检查mongo数据密钥是否存在

Node.js 检查mongo数据密钥是否存在,node.js,mongodb,Node.js,Mongodb,我有一些产品数据,其中一些产品没有关键的“图像。封面”。 现在,当我尝试打印所有数据时,它显示错误 无法读取未定义的属性“cover” 所以我试着让images.cover键不存在,然后把var cover=''其他图像。封面值。我正在使用错误消息中的nodejs和mongodb: 无法读取未定义的属性“cover” 您可以将故障产品文档上的错误源缩小为以下三个属性之一: 文档没有图像字段(因此是未定义的对象) 图像字段可能为空,并且 盖键也可能不存在 让我们考虑一个最小的测试用例,其中一个示例

我有一些产品数据,其中一些产品没有关键的“图像。封面”。 现在,当我尝试打印所有数据时,它显示错误

无法读取未定义的属性“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='';}的可能重复项