Json 如何使用nodejs和mongo客户端更新保存在mongodb中的记录?
在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
{
"_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中的记录
我正在尝试更新projectName和testCases[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