合并列具有相同值的文档并使用找到的数据创建字段

Merge documents where a column has the same value and create fields with found data

如何将同一用户的文档合并在一起?

我觉得很难做的是自动将 "field" 列的值添加为列,并将 "data" 字段的数据自动添加为新创建的列的值。

喜欢合并这两个,因为它们具有相同的用户 ID 并且具有列 "Date of birth":"1989-01-12" 和 "Job":"Teacher".

我知道要问的问题很多,但有人可以指导我如何实现吗?

{
    "_id" : ObjectId("5d6b00b960016c4c441d9a16"),
    "user" : 1000,
    "field" : "Date of birth",
    "data" : "1989-01-12",
    "timestamp" : "2017-08-27 11:00:59"
}

{
    "_id" : ObjectId("5d6b00b960016c4c441d9a17"),
    "user" : 1000,
    "field" : "Job",
    "data" : "Teacher",
    "timestamp" : "2017-08-27 10:59:19"
}

进入

{
    "_id" : ObjectId("5d6b00b960016c4c441d9a16"),
    "user" : 1000,
    "Date of birth" : "1989-01-12",
    "Job" : "Teacher",
    "timestamp" : "2017-08-27 11:00:59"
}

要合并文档,您可以迭代它们以创建新文档。 如果您想删除对给定用户的旧引用,则必须在插入新文档之前删除它们。

您可以使用 MongoDB 的 javascript 界面:

// Get the docs
docs = db.find({user:1000})
// Init common values of the new doc
new_doc = db.findOne({user:1000}) 
// Remove the unused field in the new object
delete new_doc.field
delete new_doc.data 
for (i=0; i<docs.size(); i++){
    doc = docs[i]
    new_doc[doc["field"]] = new_doc["data"]
    if (Date(doc["timestamp"]) > Date(new_doc["timestamp"])) {
        new_doc["timestamp"] = doc["timestamp"]
    }
}
// remove all references to the user if you need to
db.remove({user:1000}, {multi:true})
// insert the merged document
db.insert(new_doc)