如何在MongoDb中更新数组值?

如何在MongoDb中更新数组值?,mongodb,database,Mongodb,Database,如何在MongoDb中更新阵列 这是我的shell脚本我想用这个脚本更新fileInfo有些产品有fileInfo存在有些产品有 文件信息不存在 因此,我的要求是,如果文件信息存在,它将更新,如果文件信息不存在,它将创建 我的代码会被什么修改?谢谢 { "_id" : ObjectId("56d460721cdb5a4b0a73d4ba"), "catId" : "56d4558b1cdb5a4b0a73d03b", "pname" : "ABCName", "b

如何在MongoDb中更新阵列

这是我的shell脚本我想用这个脚本更新fileInfo有些产品有fileInfo存在有些产品有 文件信息不存在

因此,我的要求是,如果文件信息存在,它将更新,如果文件信息不存在,它将创建

我的代码会被什么修改?谢谢

{
    "_id" : ObjectId("56d460721cdb5a4b0a73d4ba"),
    "catId" : "56d4558b1cdb5a4b0a73d03b",
    "pname" : "ABCName",
    "brand" : "ABCBrand",
    "actualPrice" : "19",
    "offer" : 0,   
    "shopId" : "56d312a61cdb5a1a2d8045",
    "mProId" : "569e04ecd08598371ebe53eb",
    "del" : "N",
    "createdOn" : "28-Feb-2016 19:29:29 UTC"
}
添加数据在每个文件中都是如此

"fileInfo" : [
        {
            "versionId" : "BHpKOLlsgIRF7JqcBrKLPDFC5OgUAUEp",
            "fileKey" : "productFile/abc.jpg"
        }
    ],
这是我的shell脚本代码

var product = currentDb.getCollection("product");

var shop_id = "56d312a61cdb5a1a2d8045";

var mproductData = mproduct.find();
var productData = product.find({shopId:shop_id});
var productData1 = product.find({shopId:shop_id}).count();

var count=0;
var mcount=0;
for(var i=0;i<mproductData.length();i++)
{
    mcount++ 
    for(var j=0;j<productData.length();j++)
    {

    if(mproductData[i]._id==productData[j].mProId)
    {            
            count++;
            var mpro_id = mproductData[i]._id;
            var mfile_version = mproductData[i].fileInfo[0].versionId; 
        var mfile_key = mproductData[i].fileInfo[0].fileKey;     
        print(mpro_id);
        print(mfile_info);
        print(mfile_key);
            if(mproductData[i]._id==productData[j].mProId)
    {            
            count++;
            var mpro_id = mproductData[i]._id;
            var mfile_version = mproductData[i].fileInfo[0].versionId; 
        var mfile_key = mproductData[i].fileInfo[0].fileKey;     
        print(mpro_id);
        print(mfile_info);
        print(mfile_key);
        product.update({"mProId":''+mpro_id+''},{"$set": {"fileInfo" : [{"versionId" : ''+mfile_info+'',"fileKey" : ''+mfile_key+''}]}};

    }
    }        
}
var product=currentDb.getCollection(“产品”);
var shop_id=“56d312a61cdb5a1a2d8045”;
var mproductData=mpproduct.find();
var productData=product.find({shopId:shop\u id});
var productData1=product.find({shopId:shop_id}).count();
var计数=0;
var mcount=0;
对于(var i=0;iTry


如果它不存在,这将创建
fileInfo
属性,否则只需更新它

我没有完整的上下文,因此无法在我的计算机上复制您的代码和环境。我建议您查看并比较您正在做的
产品。更新
并将其与我的解决方案进行比较。它们看起来一样吗?您看到我的js代码了吗rhis fileInfo是一个示例数据,我想更新版本ID,fileKey取决于MPProduct。因此,每当我在脚本中使用您的代码时,它都会显示一个错误,将db.collection替换为
product
。我相信您正在按原样使用它。不要在此处复制您的代码,而是更新您的帖子。同样,此论坛是免费的帮助您找到解决方案,而不是解决您的作业或家庭作业。因此,请返回并阅读您的代码,调试代码,并尝试找出您做错了什么?我们是来帮助您的,但不是来做您的作业或家庭作业的。如果您不懂编程,请使用谷歌搜索并阅读文档。
db.collection.update({},{$set: {"fileInfo" : [
       {
            "versionId" : "BHpKOLlsgIRF7JqcBrKLPDFC5OgUAUEp",
            "fileKey" : "productFile/abc.jpg"
       }
]}},{multi:true})