代码之家  ›  专栏  ›  技术社区  ›  Segev Lahav

如何编写mongo查询来查询对象内的数组?

  •  2
  • Segev Lahav  · 技术社区  · 9 年前

    [
      {
        dec: 5972,
        bin: [0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0]
      },
      {
        dec: 397250,
        bin: [1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0]
      },
      {
        dec: 5,
        bin: [0,1,0,1]
      },
      {
        dec: 123,
        bin: [0,1,1,1,1,0,1,1]
      }
    ]
    

    如何查询数据库以提供其中数字为“0”和“1”的所有对象 bin 属性是平等的。

    {
      dec: 5,
      bin: [0,1,0,1]
    }       
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   gmode    9 年前

    db.test.aggregate([
    {
        $project: {
            dec: "$dec",
            bin: "$bin",
            original_bin: "$bin"
        }
    },
    
    {
        $unwind: "$bin"
    },
    {
        $group: {
            _id: {
                dec: "$dec",
                bin: "$bin",
                original_bin: "$original_bin"
            },
    
            total: {
                $sum: 1
            }
        }
    },
    {
        $group: {
            _id: {dec: "$_id.dec", original_bin: "$_id.original_bin"},
            sums: {
                $addToSet: "$total"
            }
        }
    },
    {
        $match: {
            sums: {
                $size: 1
            }
        }
    },
    {
        $project: {
            _id: 0,
            dec: "$_id.dec",
            bin: "$_id.original_bin"
        }
    }
    ]);
    

    我有这样的样本数据:

    {"dec":1,bin: [0,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0]}
    {"dec":2,bin: [0,1,0,1,0,0]}
    {"dec":3,bin: [1,0,1,0,1,0]}
    {"dec":4,bin: [0,1,0,0]}
    {"dec":5,bin: [0,0,0,1,1,1]}
    {"dec":6,bin: [0,1]}
    

    给定对样本数据的查询将返回所需的数组:

    { "dec" : 6, "bin" : [ 0, 1 ] }
    { "dec" : 3, "bin" : [ 1, 0, 1, 0, 1, 0 ] }
    { "dec" : 5, "bin" : [ 0, 0, 0, 1, 1, 1 ] }
    
    推荐文章