2017-08-14 62 views
2

可以说我有看起来像这样的一个蒙戈数据库:如何编写查询对象内数组的mongo查询?

[ 
    { 
    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

在这里你去:

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 ] }