在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"
}
]
}
}
Nodejs代码
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中保存的记录。 我正在使用nodejs restful webservice并且请求已成功提供但无法更新moongodb中的记录。
我正在尝试更新 projectName 和 testCases [1] .groupName
答案 0 :(得分:1)
使用 $addToSet
运算符进行数组更新,因为它允许您向数组添加值,除非该值已存在,在这种情况下 $addToSet
对该数组没有任何作用。对于其他非数组字段, $set
就足够了。
考虑将您的方法重构为
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();
}
};