2017-07-24 62 views
1

如何合并共享相同值的集合中的两个文档 - 循环?在pymongo中共享相同值的集合中加入文档

{'Time': datetime.datetime(2015, 5, 25, 9, 4, 39), 
'Cycle': 3796, 
'Explanation': 'A 00146 - Q plastification time', 
'_id': ObjectId('5976272b4a20d138cce55aa3')} 

{'A [s]': 0.0, 
'B [s]': 0.81, 
'C [s]': 3.0, 
'Time': datetime.datetime(2015, 5, 26, 10, 33, 10), 
'PauseTime Z [s]': 0.01, 
'Cycle': 3796, 
'_id': ObjectId('597627244a20d138cce5197a')} 

因此,它看起来像:

{'Time': datetime.datetime(2015, 5, 25, 9, 4, 39), 
'Cycle': 3796, 
'Explanation': 'A 00146 - Q plastification time', 
'A [s]': 0.0, 
'B [s]': 0.81, 
'C [s]': 3.0, 
'Time': datetime.datetime(2015, 5, 26, 10, 33, 10), 
'PauseTime Z [s]': 0.01, 
'_id': ObjectId('_______')} 
+0

这个例子是不可能的,因为文档是作为字典来处理的,字典不能将单个键映射到两个不同的值(例如Time,这可能与mongoDB核心中的假设相同,而不仅仅是python的界面pymongo)。 – sascha

回答

1

如果你表现出的头文件是一个名为“C1”集合中,第二个是一个集合称为“c2”,您可以使用MongoDB汇聚运算符“$ lookup”加入它们:

for doc in db.c2.aggregate([{ 
    '$lookup': { 
     'from': 'c1', 
     'localField': 'Cycle', 
     'foreignField': 'Cycle', 
     'as': 'joined' 
    } 
}, { 
    '$project': { 
     'Time1': '$Time', 
     'Cycle': '$Cycle', 
     'Explanation': '$joined.Explanation', 
     'Time2': '$joined.Time', 
     'A [s]': '$A [s]', 
     'B [s]': '$B [s]', 
     'C [s]': '$C [s]', 
     'PauseTime Z [s]': '$PauseTime Z [s]' 

    } 
}]): 
    pprint.pprint(doc) 

此输出:

{u'A [s]': 0.0, 
u'B [s]': 0.81, 
u'C [s]': 3.0, 
u'Cycle': 3796, 
u'Explanation': [u'A 00146 - Q plastification time'], 
u'PauseTime Z [s]': 0.01, 
u'Time1': datetime.datetime(2015, 5, 26, 10, 33, 10), 
u'Time2': [datetime.datetime(2015, 5, 25, 9, 4, 39)], 
u'_id': ObjectId('597627244a20d138cce5197a')} 

的字典不能有两个键具有相同的名称,以及文件BSON应该有两个名称相同的钥匙,所以我改名为两个“$ project”阶段中的“Time”字段为“Time1”和“Time2”。