我有一个具有以下格式的MongoDb文档
{
"_id": { "$oid": "587b5a985390100541f52d8e" },
"name": "M&G",
"type": "F",
"category": "Multi",
"data": [
{
"date": { "$date": "2014-08-03T22:00:00.000Z" },
"value": 13.172
},
{
"date": { "$date": "2014-08-04T22:00:00.000Z" },
"value": 13.133
}
],
"meta": {
"code": "103039925"
}
}
我用
var cname = // collection name
var docs= [] // array of objecs e.g. {date:<Date> value:<Number> }
var opts = { w: 1, upsert: false, returnOriginal: false };
connection.collection(cname)
.findOneAndUpdate(query, { $addToSet: {data: { $each: docs }} }, opts, function (err, res) {
// do something
});
我的问题是$ addToSet确保没有重复的对象被添加到集合中 但使用对象平等
此对象具有重复日期,但$ addToSet
未将其识别为重复日期{
"date": { "$date": "2014-08-04T22:00:00.000Z" },
"value": 0
}
我的应用程序要求数组中的任何对象都有唯一的日期。 有没有办法获得它?实际上,如果观察到具有重复日期的对象,它应该更新对象的值
答案 0 :(得分:0)
在您的情况下,您使用$addToSet
与$each
根据我的知识在Array
上执行,但在您的情况下,您使用的是Object array
,这是嵌入式的形式MongoDB中的文档。
我认为你可以使用这种方法,或者可能有其他方法
{
"_id": { "$oid": "587b5a985390100541f52d8e" },
"name": "M&G",
"type": "F",
"category": "Multi",
"data": [
{
"date": "2014-08-03T22:00:00.000Z" ,
"value": 13.172
},
{
"date": "2014-08-04T22:00:00.000Z" ,
"value": 13.133
}
],
"meta": {
"code": "103039925"
}
}
var cname = // collection name
var docs= [] // array of objecs e.g. {date:<Date> value:<Number> }
var opts = { w: 1, upsert: false, returnOriginal: false };
connection.collection(cname)
.update({'data.date': { '$ne': new Date() } },{ $push: {data: docs } }, opts, function (err, res) {
// do something
});
您也可以从here
查看