MongoDB Node JS – 从文档对象内部的对象中删除一个条目
我正在尝试使用本地mongodb驱动程序在Node JS中创build一个命令,以从文档对象内部的对象中删除键值对。
我有以下格式的mongoDB集合:
{ "name" : "PrakashPM" "data" : { "Jan-2017" : "2,3,1", "Dec-2016" : "1,2,0", "Nov-2016" : "9,9,9" } }, { "name" : "Valavan" "data" : { "Jan-2017" : "1,1,1", "Dec-2016" : "3,3,3", "Nov-2016" : "9,9,9" } }
我的目标是去除“2016年12月”:“名称”内的“1,2,0”:“PrakashPM”
我的代码:
var mongoName = 'PrakashPM'; var mongoDate = "'data'.'Dec-2016'"; // TRIALS // var mongoDate = "data.'Dec-2016'"; // var mongoDate = "data.Dec-2016"; var mongoVal = "'1,2,0'"; // TRIALS // var mongoVal = "1,2,0"; mycollection.update( { name: mongoName }, { $unset: {mongoDate : mongoVal} } );
注意:我正在PUT请求函数内执行上述操作。
我尝试了许多可能的方式(TRIALS)的input值(mongoDate,mongoVal),但我无法实现下面的结果。
另外,是否可以通过使用密钥删除键值对条目? (即在这种情况下{$ unset:{mongoDate}}或类似的东西)
预期结果:
{ "name" : "PrakashPM" "data" : { "Jan-2017" : "2,3,1", "Nov-2016" : "9,9,9" } }, { "name" : "Valavan" "data" : { "Jan-2017" : "1,1,1", "Dec-2016" : "3,3,3", "Nov-2016" : "9,9,9" } }
假设req.body.timerDate具有与MongoDB中完全相同的月份datestring值,这应该工作。 (请参阅文档 )。
你必须使用string作为关键。 你不能在那里使用variables名。
// Assuming that req.body.timerDate // has the month-date as stored in MongoDB (case-sensitive match) var reqDate = "data." + req.body.timerDate; var reqName = req.body.name; var _unset = {}; _unset[reqDate] = ""; mycollection.update({ name: reqName }, { $unset: _unset })
使用以下示例作为更新集合的指南。 您需要使用括号表示来创build查询和更新文档,即您需要具有以下结构的更新操作:
db.mycollection.update( { 'name': 'PrakashPM' }, { '$unset': { 'data.Dec-2016': '' } } )
所以,使用这些variables来构build要在您的操作中使用的对象
var mongoName = 'PrakashPM'; var timerDate = 'Dec-2016'; var query = {}; var update = {'$unset': {}}; query['name'] = mongoName; update['$unset']['data.'+timerDate] = ''; db.mycollection.update(query, update)
您正试图将variables用作对象中的键。
mycollection.update( { timerName: mongoName }, { $unset: {mongoDate : mongoVal} } );
这不符合你的期望,是一个通用的JavaScript概念(不是mongodb问题)。 您正在向mongo发送一个查询来更新一行,其中“timerName”键等于variables“mongoName”的内容。 但正确的关键是“名称”。
尝试这个:
mycollection.update( { name: mongoName }, { $unset: {data : mongoVal} } );
- 当其中一个参数有一个空格时,nodeJS child_process.spawn不起作用
- 为什么crypto.createHash在新版本中返回不同的输出?
- Sinon称为With和calledWithMatch失败的对象编辑:Sinon间谍对象的构造函数
- 无法使用客户ID创buildBraintree客户端令牌
- 使用passport.jspipe理express.js中不同types用户的身份validation
- callback已被称为asynchronous并行
- 从phantomjs运行摩卡
- 如何将callback返回值分配给Mongoose中的variables?
- Node.jsfile upload(Express 4,MongoDB,GridFS,GridFSstream)