从MongoDB中不在数组中的数组中删除所有项

时间:2017-03-24 13:09:30

标签: arrays mongodb collections synchronization mongodb-query

我在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. 使用templateId:0
  2. 将{data:“e”}复制到所有文档的数组中
  3. 使用templateId:0
  4. 从所有文档的数组中删除{data:“d”}
  5. 但请勿触摸其余部分。我不能简单地替换数组,因为必须保留这些值
  6. 我找到了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,...] 之外的其他内容?

0 个答案:

没有答案