我在Mongo有两个收藏。为简化起见,我提供了一个缩小的例子
模板集:
{
templateId:0,
values:[
{data:"a"},
{data:"b"},
{data:"c"}
{data:"e"}
]
}
数据收集:
{
dataId:0,
templateId:0,
values:[
{data:"a",
value: 10},
{data:"b",
value: 120},
{data:"c",
value: 3220},
{data:"d",
value: 0}
]
}
我想从模板集合 - >进行同步数据收集,在模板0和使用该模板的所有文档之间。在示例的情况下,这意味着:
我找到了1的解决方案。
。db.getCollection( '数据')更新({templateId:0}, {$ addToSet:{values:{ 每个$: {数据: “一个”}, {数据: “B”}, {数据: “C”} {数据: “E”} ] },} { 多:真} )
2的部分解决方案。
我明白了。首先尝试使用$ pullAll,但正常的$ pull似乎与$ nin运算符一起工作
db.getCollection('data').update({templateId:"QNXC4bPAF9J6r9FQu"},
{$pull:{values: { $nin:[
{data:"a"},
{data:"b"},
{data:"c"}
{data:"e"}]
}}}, {
multi: true}
)
这将从所有文档数组中删除 {data:“d”} ,但似乎覆盖整个数组,这不是我想要的,因为那些值条目需要保留
但是如何执行像从数组中删除所有内容的查询除了[a,b,c,d,...] 之外的其他内容?