使用游标的mongodb 3.2查询

时间:2018-07-09 07:07:42

标签: mongodb cursor aggregation-framework

数据结构:

"_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未定义

有什么办法可以给我输出而无需创建索引吗?

0 个答案:

没有答案