0
我有一个集合与文件是这样的:有条件移除嵌套子文档中的文件阵列MongoDB的
{
"_id" : "ABC",
"Name" : "Rajesh",
"createstmp" : ISODate("2015-06-22T17:09:16.705Z"),
"updstmp" : ISODate("2015-06-22T19:31:53.527Z"),
"AvgValue" : "65",
"PreValues" : [
{
"Date" : 20150709,
"Rate" : [
{
"Time" : 1566,
"value" : 60
},
{
"Time" : 1500,
"value" : 400
},
{
"Time" : 1400,
"value" : 100
},
{
"Time" : 1500,
"value" : 103
}
]
}
]
}
我想删除重复的文档特定日期值 例如,如果时间值是1500,我需要在单个批量操作中提取文档并将其推到(Value)的新值。
这里是我的查询
bulk.find({ "_id":"ABC" })
.update(
{
"_id": "ABC",
"PreValues": { "Date": 20150709 }
},
{
$pull: { "PreValues": { "Rate": { "Time": 1000 } } }
}
);
bulk.find({ "_id":"ABC" })
.update(
{ "_id": "ABC","PreValues": { "Date": 20150709 }},
{ $push : {
"PreValues": { "Rate": { "Time": 1000,"Rating": 100 }}
}}
);
bulk.execute();
@VinaySawant请不要在评论中发布代码清单。基本上,您需要使用代码,因为我已经为它提供了适合您要匹配的文档和元素的正确值。这里的教训是1.批量操作的正确语法,2.在查询条件中匹配要正确更新的数组元素。 3.在点更新中使用“点符号”和位置操作符 –
@VinaySawant我刚刚通过shell运行了所有内容,并将这些命令发回到了这里,以防输入错误。还增加了如何修改您在问题中提供的示例。正如你所看到的结果,其他值匹配“1500”的数量已经消失,只有新的数组元素现在被添加到数组中。 –
@VinaySawant当然有用。我刚刚告诉过你,代码和你的数据样本一起被剪切/放入,并产生如图所示的结果。如果它不适合你,那么你正在做一些不同于这里的例子。把你自己的示例数据放到一个测试集合中,复制并粘贴我在这里的代码(因为shell不喜欢它而没有缩进)并亲自查看。也。不是一个“人”,你也不应该做出这些假设。 –