阵列中的MongoDB项目额外字段
首先,我要说我对MongoDB没有任何经验。我对SQL和关系数据库很有经验,但整个MongoDB对我来说是全新的。虽然我们需要把它用于学校作业,但我就是搞不懂 我有一个名为“任务”的文档集,看起来像这样:阵列中的MongoDB项目额外字段,mongodb,Mongodb,首先,我要说我对MongoDB没有任何经验。我对SQL和关系数据库很有经验,但整个MongoDB对我来说是全新的。虽然我们需要把它用于学校作业,但我就是搞不懂 我有一个名为“任务”的文档集,看起来像这样: { "_id" : ObjectId("563b59f8da33f3593f29a3c6"), "questid" : 1, "userid" : "BillKellock@excite.us", "cache" : { "cacheid" :
{
"_id" : ObjectId("563b59f8da33f3593f29a3c6"),
"questid" : 1,
"userid" : "BillKellock@excite.us",
"cache" : {
"cacheid" : 1,
"latitude" : 50.8921231431384200,
"longitude" : 4.4543394886210281
},
"measurements" : [
{
"timestamp" : "2015-11-05T14:21:55.0980113+01:00",
"heartrate" : 70,
"pressure" : 1026,
"temperature" : null,
"conductivity" : 3371,
"latitude" : 50.4533254161725400,
"longitude" : 4.1293538055053700
},
{
"timestamp" : "2015-11-05T14:21:55.0990122+01:00",
"heartrate" : null,
"pressure" : 947,
"temperature" : 277,
"conductivity" : 3918,
"latitude" : 50.9827324962163000,
"longitude" : 4.7924412785994086
},
...
]
},
{
"_id" : ObjectId("563b59f8da33f3593f29a3ce"),
"questid" : 2,
...
我需要做的是获得按cacheid和questid分组/排序的度量的概述。这方面的任务不是很清楚,我不知道是需要分组还是直接订购。无论如何,我试着按cacheid对度量值进行分组,然后想将questid添加到度量值中,以便根据该字段进行排序
到目前为止,我构建的查询是:
db.quests.aggregate(
[
{ $unwind: "$measurements" },
{ $group:
{
_id:"$cache.cacheid",
measurements: { $push: "$measurements" }
}
},
{
$project:
{
"measurements.timestamp": 1,
"measurements.heartrate": 1,
"measurements.pressure": 1,
"measurements.temperature": 1,
"measurements.conductivity": 1,
"measurements.latitude": 1,
"measurements.longitude": 1,
"measurements.questid": "$questid",
}
}
]
)
这给了我按cacheid(显示为_id)分组的度量值。然而,在测量数组中没有任何问题的迹象。我不知道如何“添加”该字段,大量的谷歌搜索也没有进一步帮助我
我确实找到了.group(),但这不适用于分片集合(我使用的集合是分片的)
有人能帮我吗?您在
$group
管道阶段的聚合错误。分组阶段根据您的规则组装新文档,然后将它们传递到下一阶段。您仅定义\u id
和测量值;这就是为什么您无法在投影阶段访问questid
您必须添加处理逻辑,甚至可能在小组阶段添加questid
。然后,你可以在放映台上使用它
关于你的作业,我认为你应该分组,然后使用cacheid和questid作为复合键对文档进行排序。在您的小组阶段,类似这样的内容:
'_id': {cacheid: '$cache.cacheid', questid: '$questid'}
非常感谢。将id设置为复合键可以消除将questid添加到测量中的需要。