这是我在一个monggodb集合中的文档结构。 我想了解一个人如何对密钥“代码”和嵌套json中的索引位置进行分组计数的mongo聚合(不是优先级,因为它可以是任何数字,但在嵌套的时间表中只能有5个值):< / p>
{
"_id" : ObjectId("5749e9fde4b0064e7362b560"),
"_class" : "com.weirdcompanyname.core.collectionname",
"rfId" : 1,
"scheduleds" : [
{
"code" : "556e4835f1eae40bdfa2f2001f2afc76",
"type" : "HT",
"priority" : 0
},
{
"code" : "8b2ab67af4f60e42f7ea64813b5795cf",
"type" : "HT",
"priority" : 1
},
{
"code" : "ed17101eb918b4d8c7c598e4884523ea",
"type" : "HT",
"priority" : 2
},
{
"code" : "7e0ffb4db",
"type" : "QZ",
"priority" : 3
},
{
"code" : "1453dfa1794f39b05f0259ad04699073",
"type" : "HT",
"priority" : 4
}
],
"created" : ISODate("2016-05-28T18:57:00.878Z")
}
我想找到的结果是:
code index_position count
556e4835f1eae40bdfa2f2001f2afc76 0 100
8b2ab67af4f60e42f7ea64813b5795cf 1 100
ed17101eb918b4d8c7c598e4884523ea 2 100
7e0ffb4db 3 100
1453dfa1794f39b05f0259ad04699073 4 100
我可以解决单个数组中嵌套的json,然后将代码分组到代码和其他列上,让我们说优先级并计算,但问题是获取索引位置。
这对mongo来说是否可行,我已经阅读了很多有关它的内容,我想如果我有价值我需要一个位置然后它可以实现但我真的没有价值看因为,我正在寻找的是每个代码及其在“预定”中的索引位置和计数。 这是我可以用我有限的mongo查询技能做的事情:
db.collectionname.aggregate([{'$match':{'date_key':{'$gte': yesterday_beginning, '$lte': yesterday_end}}}, {'$unwind':'$scheduleds'}, {'$group':{'_id':{'code':'$scheduleds.code','priority':'$scheduleds.priority'}, 'rfid':{'$addToSet':'$rfId'}}}, {'$project':{'_id':0, 'code':'$_id.code', 'priority':'$_id.priority', 'totalRfid':{'$size':'$rfid'}}}, { $limit : 1000 }],{ allowDiskUse:true})
答案 0 :(得分:1)
Alain1405 says here MongoDB 3.2支持展开数组索引。
您可以通过
$unwind
运算符而不是传递路径 具有字段路径和字段includeArrayIndex
的对象 将保存数组索引。来自MongoDB official documentation:
{ $unwind: { path: <field path>, includeArrayIndex: <string>, preserveNullAndEmptyArrays: <boolean> } }