阵列中的MongoDB项目额外字段

阵列中的MongoDB项目额外字段,mongodb,Mongodb,首先,我要说我对MongoDB没有任何经验。我对SQL和关系数据库很有经验,但整个MongoDB对我来说是全新的。虽然我们需要把它用于学校作业,但我就是搞不懂 我有一个名为“任务”的文档集,看起来像这样: { "_id" : ObjectId("563b59f8da33f3593f29a3c6"), "questid" : 1, "userid" : "BillKellock@excite.us", "cache" : { "cacheid" :

首先,我要说我对MongoDB没有任何经验。我对SQL和关系数据库很有经验,但整个MongoDB对我来说是全新的。虽然我们需要把它用于学校作业,但我就是搞不懂

我有一个名为“任务”的文档集,看起来像这样:

{
    "_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添加到测量中的需要。