我的mongodb文件如下所示。
{"studid":"123", "name":"abc"}
我想更新此文档如下。
{"studid":"123", "name":"abc", "class":"five", "sec":"b"}
为了达到这个目的,我编写了如下代码并将查询和字段传递为。
名称 - "studreg"
,查询 - {"studid":"123"}
和字段 - "class":"five", "sec":"b"
exports.modify = function(name,query,field) {
return new Promise(function(resolve,reject){
var updateStr = '{$set:{'+field+'}}';
console.log('updateStr: ' + updateStr);
dbase.collection(name,function(err,table){
table.findAndModify(query,[[_id,desc]],updateStr,{w:1, new:true},function(err,result){
if (err) reject(err);
else
resolve(result);
});
});
});
};
作为输出,当我调用modify方法时,我的浏览器窗口上会显示以下消息。
{"lastErrorObject":{"updatedExisting":true,"n":1},"value":{"_id":"585ce7d9bef96722642adfeb"},"ok":1}
在数据库中,当我尝试查找文档时,它只显示id字段而不显示任何其他字段。你能让我知道我在哪里做错了吗?
答案 0 :(得分:1)
它表示update
字段必须是对象,而不是您使用的string
。
因此,您的输入字段必须为field- {"class":"five", "sec":"b"}
试试这个
exports.modify = function(name,query,field) {
return new Promise(function(resolve,reject){
var updateObj = {$set: field}; //field must be object
console.log('updateStr: ' + updateStr);
dbase.collection(name,function(err,table){
table.findAndModify(query,[['_id','desc']],updateObj,{upsert: true},function(err,result){
if (err) reject(err);
else
resolve(result);
});
});
});
};
还有一件事我没有看到_id
,这是您mongodb document
中document
的必填字段。
答案 1 :(得分:0)
我认为Jyothi的分析是正确的,但是该字段以字符串形式出现,需要转换为对象。在我看来,只需创建有问题的updateStr,然后使用JSON.parse(updateStr)获取该对象的版本。
exports.modify = function(name,query,field) {
return new Promise(function(resolve,reject){
var updateStr = '{$set:{'+field+'}}';
console.log('updateStr: ' + updateStr);
var updateObj = JSON.parse(updateStr);
dbase.collection(name,function(err,table){
table.findAndModify(query,[[_id,desc]],updateObj,{w:1, new:true},function(err,result){
if (err) reject(err);
else
resolve(result);
});
});
});
};
事实上它正在删除所有其他变量,但是_id只是证明了你的updateStr没有按原样被解析。
答案 2 :(得分:0)
问题解决了。正如Rahul所说,问题在于解析updateStr。当我在调用方法时使用JSON.parse('{\“$ set \”:{'+ field +'}}')和JSON.parse(查询)时,我得到了预期的结果。