Mongodb Mongoldb查找包含8个字段中多个字段的文档

Mongodb Mongoldb查找包含8个字段中多个字段的文档,mongodb,Mongodb,数据源中发生数据损坏 我们有a,b,c,d,e,f,g,h字段 都是0或1的整数值 一个文档应该只有一个值为1的字段(共8个字段)。由于损坏,它有多个值为1的字段 如何查找包含多个字段的文档 我想做下面的工作-添加所有八个字段并检查总和是否大于1如果我理解正确,您只需添加所有字段,然后匹配计数大于1的所有文档,类似这样 db.getCollection("your coll").aggregate([ {$project:{ count_feilds_values:{ $add: [ "

数据源中发生数据损坏

我们有a,b,c,d,e,f,g,h字段 都是0或1的整数值

一个文档应该只有一个值为1的字段(共8个字段)。由于损坏,它有多个值为1的字段

如何查找包含多个字段的文档


我想做下面的工作-添加所有八个字段并检查总和是否大于1

如果我理解正确,您只需添加所有字段,然后匹配计数大于1的所有文档,类似这样

db.getCollection("your coll").aggregate([
{$project:{
    count_feilds_values:{ $add: [ "$a", "$b" ,"$c"] }
}},
{$match:{count_feilds_values:{$gt:1}}}])

使用带有
$objectToArray
+
$filter
运算符的MongoDB聚合可以实现这一点:

db.collection.aggregate([
  {
    $addFields: {
      tmp: {
        $filter: {
          input: {
            $objectToArray: "$$ROOT"
          },
          cond: {
            $eq: [
              "$$this.v",
              1
            ]
          }
        }
      }
    }
  },
  {
    $match: {
      $expr: {
        $ne: [
          {
            $size: "$tmp"
          },
          1
        ]
      }
    }
  },
  {
    $unset: "tmp"
  }
])

你不能求和,因为你有0!!除了这8个字段中的一个或一组字段之外,文档中还有其他字段吗?像示例I、k、L,忘记默认的
\u id
。@whoami我还有其他字段。求和怎么不起作用呢?假设你加上a:1+b:0等于1,那么你假设有多少个字段?这意味着你可以有这样一个文档:
{id:123,a:1,b:0,c:0}
,但不是像这样的
{id:1234,a:1,b:0,c:0,d:1}
?好的,问题有点不清楚。总和对我来说是个不错的选择。谢谢。我知道了。我正在寻找一个解决方案删除或设置为0的随机值与1@Gibbs:您的mongoDB版本是什么?Amit-此查询不会提供所需的o/p!!选中此项:,OP也已对此进行了查询!!!