次のようなドキュメントがあります。
{
"_id" : ...
"args" : {
"pos" : [ <x>, <y> ],
...
}
}
次の集約パイプラインを使用して、 <x> および <y> 値の最小値と最大値を取得しようとしています。実行されますが、値が得られません。
db.main.aggregate([
{ '$match': {
"args.pos": { '$exists': true} }
},
{ '$project':
{
'x': "$args.pos.0",
'y': "$args.pos.1"
}
},
{ '$group':
{
'_id': 'pos',
'xmin': { '$min': '$x' },
'xmax': { '$max': '$x' },
'ymin': { '$min': '$y' },
'ymax': { '$max': '$y' },
'hits': { '$sum': 1 }
}
},
{ '$project': {
'hits': '$hits',
'xmin': '$xmin',
'xmax': '$xmax',
'ymin': '$ymin',
'ymax': '$ymax',
'_id': 0 }
}
])
そして、次の出力が得られます。
{
"result" : [
{
"xmin" : [ ],
"xmax" : [ ],
"ymin" : [ ],
"ymax" : [ ],
"hits" : 281
}
],
"ok" : 1
}
<x> と <y> の値にアクセスするためにさまざまな方法を試しましたが、これは初めてで、明らかに何かが欠けています。どんな助けでも大歓迎です。
問題は、アレイに到達できないことだと思います。次のより単純なクエリを試しましたが、どちらも成功しませんでした:
db.main.findOne({'function':'map'},{"arguments.pos":1})
{
"_id" : ObjectId("5110407a2c8bea0f0d0000ce"),
"arguments" : {
"pos" : [
-87.90774999999735,
42.11036897863933
]
}
}
db.main.findOne({'function':'map'},{"arguments.pos.0":1})
{
"_id" : ObjectId("5110407a2c8bea0f0d0000ce"),
"arguments" : {
"pos" : [ ]
}
}
db.main.findOne({'function':'map'},{"arguments.pos[0]":1})
{ "_id" : ObjectId("5110407a2c8bea0f0d0000ce"), "arguments" : { } }
問題があれば、mongodb 2.2 から mongo shell を実行しています。