Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js mongodb。。(不可变)字段'_id';被发现被改变了_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript node.js mongodb。。(不可变)字段'_id';被发现被改变了

Javascript node.js mongodb。。(不可变)字段'_id';被发现被改变了,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,当我尝试用新对象(从xml文件解析)向上插入对象时,我遇到了一些问题,但出现了以下错误: MongoError: exception: After applying the update to the document {_id: ObjectId('55be3c8f79bae4f80c6b17f8') , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('55be5f15ae

当我尝试用新对象(从xml文件解析)向上插入对象时,我遇到了一些问题,但出现了以下错误:

 MongoError: exception: After applying the update to the document {_id: ObjectId('55be3c8f79bae4f80c6b17f8') , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('55be5f15ae
5597401724aab3')
这是我的密码:

xmlFile.product_list.product.forEach(function (product) {

                    var productEntity = new Product({
                        product_id: parseInt(product.id),
                        parent_id: parseInt(product.parent_id),
                        sku: product.sku,
                        title: product.title,
                        pricenormal: parseFloat(product.price_normal),
                        pricewholesale: parseFloat(product.price_wholesale),
                        pricewholesalelarge: parseFloat(product.price_wholesale_large),
                        pricesale: parseFloat(product.price_sale),
                        weight: parseFloat(product.weight),
                        volume: parseFloat(product.volume),
                        unittype: product.unit_type,
                        status: product.status,
                        datecreating: product.datecreating,
                        sp: product.sp,
                        guaranteeext: product.guarantee_ext,
                        used: product.used,
                        statusfull: product.status_full,
                        description: null,
                        url: null
                    });
                    items.push(productEntity);

                });


items.forEach(function (product) { //update or create new products

                    Product.findOneAndUpdate({product_id: product.product_id}, product, {upsert: true}, function (err) {
                        if (err)  return updateDBCallback(err);
                        updateDBCallback(null, 'saved');

                    });

                });
我尝试使用以下提示:

                //product._id = mongoose.Types.ObjectId(); //doesn't work
                //delete product._id // doesn't delete _id from product
但是他们没有帮助。
所以我不想更新我的产品。_id,我只想更新其他字段。

当您执行
new product()
时,会生成一个新的
\u id
,以及其他内容。试试这个:

items.forEach(function (product) { //update or create new products

  // Es6 assign
  var productToUpdate = {};
  productToUpdate = Object.assign(productToUpdate, product._doc);
  delete productToUpdate._id;

  Product.findOneAndUpdate({product_id: product.product_id}, productToUpdate, 
                         {upsert: true}, function (err) {
    if (err)  return updateDBCallback(err);
       updateDBCallback(null, 'saved');

  });

});
您可以使用以下选项:

Product.replaceOne({ _id: 55be3c8f79bae4f80c6b17f8}, {                         
   product_id: parseInt(product.id),
   parent_id: parseInt(product.parent_id),
   sku: product.sku,
   title: product.title,
   pricenormal: parseFloat(product.price_normal),
   pricewholesale: parseFloat(product.price_wholesale),
   pricewholesalelarge: parseFloat(product.price_wholesale_large),
   pricesale: parseFloat(product.price_sale),
   weight: parseFloat(product.weight),
   volume: parseFloat(product.volume),
   unittype: product.unit_type,
   status: product.status,
   datecreating: product.datecreating,
   sp: product.sp,
   guaranteeext: product.guarantee_ext,
   used: product.used,
   statusfull: product.status_full,
   description: null,
   url: null});
尝试使用

const product = productEntity.toObject();
...
delete product._id;
...
Product.findOneAndUpdate({product_id: product.product_id}, product)

当我尝试在节点v0.12.7中使用Object.assign时,我得到了“TypeError:undefined不是函数”,因此,我必须为typescript用户使用此垫片:
使用let或const声明的任何属性都不能从定义它们的范围中删除。
我收到此错误
obj.toObject不是函数
,而此代码可能解决OP的问题,最好包括关于代码如何解决OP问题的解释。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到自己的代码中。因此,它不是一种编码服务,而是一种知识资源。此外,高质量、完整的答案更有可能被提升。这些特性,以及所有帖子都是独立的要求,是SO作为一个平台的一些优势,使其区别于论坛。您可以编辑以添加其他信息和/或使用源文档补充说明。