数据结构:
"_id" : ObjectId("59311504e3d99e3012345678"),
"a1" : "52364585",
"a2" : "PQR",
"a3" : "O",
"a4" : false,
"b1" : {
"p11" : "S1",
"p12" : ISODate("2016-09-16T00:00:00.000Z"),
"p13" : "Q4",
"p14" : "IN",
"P15" : [
{
"w1" : 645832659,
"w2" : "CO",
"w3" : "80124",
"w4" : "WW"
}
],
"P16" : {
"Z11" : "",
"Z12" : ""
},
"P17" : [
{
"x1":45
"x2":55
"x3":65
},
{
"x1":45
"x2":55
"x3":65
}
],
"b2" : []
}
我大约有3000万份结构相似的文档。 我想找出“ _id”,其中a2为“ PQR”,而P17的值大于1。 我没有在a2和“ b1.p17”上的索引。 在某些文档中,b1和/或“ b1.p17”可能不可用。
我正在尝试的聚合查询,
db.account.aggregate(
{$match:{$and: [ {"a2":"PQR"},{"b1":{"$exists":"true"}}]}},
{$project: {numberOfCount: { $size: "$b1.p17" }}},
{$match:{numberOfCount :{$gt : 1}}}
)
但是,由于没有索引,所以没有输出。 我尝试过的另一个选项是光标。
for (var i = 0; i <= 4532660; i=i+10000){
print(i);
var cur= db.account.find().sort({"_id":1}).skip(i).limit(10000)
while(cur.hasNext()) {
if(cur.next()['a2']=="PQR"){
if(cur.next()['b1'] != null){
if(cur.next()['b1']['p17'] != null && cur.next()['b1']['p17'].length>1)
{
print('_id');
}
}
}
}
}
获取错误:
TypeError:cur.next(...)。bad未定义
有什么办法可以给我输出而无需创建索引吗?