Json 如何使用nodejs和mongo客户端更新保存在mongodb中的记录?

Json 如何使用nodejs和mongo客户端更新保存在mongodb中的记录?,json,node.js,mongodb,express,Json,Node.js,Mongodb,Express,在mongodb中保存的日期 { "_id" : ObjectId("5a8a95c431789513bc542334") "projectName" : "MMMMM", "testCases" : [ { "groupName" : "Data Validation Bucket 19" }, { "grou

在mongodb中保存的日期

{
        "_id" : ObjectId("5a8a95c431789513bc542334")
        "projectName" : "MMMMM",
        "testCases" : [ 
            {
                "groupName" : "Data Validation Bucket 19"
            },
            {
                "groupName" : "Test"
            }
        ]
    }
JSON请求

{
    "_id" : "5a8a95c431789513bc542334",
    "updateData" : {
        "projectName": "MMMMM",
        "testCases": [
          {
            "groupName": "Data Validation Bucket 19"
          },
          {
            "groupName": "Data Validation Bucket 123"
          }
         ]  
    }
}
节点代码

module.exports.update = function (data, callback) {
    var connection = myDB.get();
    var id = data._id;
    var dataToUpdate = data.updateData;

    var reponse = {
        'status' : ''
    }

    if(id) {
        console.log(id);
        console.log(dataToUpdate);
        connection.collection('REPORTS').update({_id : id}, {$set:dataToUpdate}, (err, result) => {
            if (err) {
                console.log(err);
                reponse.status = constantsUtils.ERROR;
                callback(reponse);
            } else {
                reponse.status = constantsUtils.UPDATE_SUCCESS;
                callback(reponse);                
            }
        });
    } else {
        reponse.status = constantsUtils.INVALID_INPUT;
        callback(reponse);
    }
};
我正在尝试使用nodejs和mongoclint更新保存在mongodb中的记录。 我正在使用nodejsrestfulwebservice,请求已成功送达,但无法更新moongodb中的记录

我正在尝试更新projectNametestCases[1]。groupName

使用操作符进行数组更新,因为它允许您向数组添加值,除非该值已经存在,在这种情况下对该数组不做任何操作。对于其他非数组字段,
$set
就足够了

module.exports.update = function (data, callback) {
    var connection = myDB.get();
    var id = data._id;
    var dataToUpdate = data.updateData;

    var reponse = {
        'status' : ''
    }

    if(id) {
        console.log(id);
        console.log(dataToUpdate);
        connection.collection('REPORTS').update({_id : id}, {$set:dataToUpdate}, (err, result) => {
            if (err) {
                console.log(err);
                reponse.status = constantsUtils.ERROR;
                callback(reponse);
            } else {
                reponse.status = constantsUtils.UPDATE_SUCCESS;
                callback(reponse);                
            }
        });
    } else {
        reponse.status = constantsUtils.INVALID_INPUT;
        callback(reponse);
    }
};
考虑重构您的方法以

const { ObjectId } = require('mongodb'); 
const safeObjectId = s => ObjectId.isValid(s) ? new ObjectId(s) : null;

module.exports.update = function (data, callback) {
    let collection = myDB.get().collection('REPORTS'),
        query = {},
        update = {},
        id = data._id,
        dataToUpdate = data.updateData,
        response = { 'status' : '' };

    const handleError = err => {
        console.error(err);
        reponse.status = constantsUtils.ERROR;
        callback(reponse);
    }

    const handleSuccess = res => {
        console.log(res);
        reponse.status = constantsUtils.UPDATE_SUCCESS;
        callback(reponse);
    }

    const handleInvalidInput = () => {
        reponse.status = constantsUtils.UPDATE_SUCCESS;
        callback(reponse);
    }       

    if ( id ) {
        query['_id'] = { '_id': safeObjectId(id) };
        update['$set'] = { 'projectName': dataToUpdate.projectName };

        if( Object.prototype.toString.call( dataToUpdate.testCases ) === '[object Array]' ) {
            update['$addToSet'] = { 'testCases': { '$each': dataToUpdate.testCases  } };
        }

        collection.findOneAndUpdate(
            query, 
            update, 
            { returnOriginal: false }
        ).then(handleSuccess, handleError);

    } else {
        handleInvalidInput();
    }
};

我收到未定义的
safeObjectId
错误。所以它是一个内置的方法,或者需要创建它?@SangramBadi它已经在
模块.exports
前面的代码段顶部定义好了。您可以在函数中移动它或使用这些帮助器方法创建一个帮助器文件,因为您需要函数将字符串
\u id
s转换为
ObjectId
s