【发布时间】:2017-05-07 10:13:51
【问题描述】:
我在名为 favoriteColors 的 MongoDB 集合中有以下 4 个字典:
{ "name" : "Johnny", "color" : "green" }
{ "name" : "Steve", "color" : "blue" },
{ "name" : "Ben", "color" : "red" },
{ "name" : "Timmy", "color" : "cyan" }
我正在尝试创建与不同有序列表匹配的颜色值的有序列表。
例如,如果我有列表 ["Johnny", "Steve", "Ben", "Johnny"],则新列表将为 ["green", "blue", "red", "green"]。
如果我有列表 ["Steve", "Steve", "Ben", "Ben", "Johnny"],那么新列表将是 ["blue", "blue", "red", "red", "green"]。
使用 Python 和/或 PyMongo 有什么好的方法。这是我到目前为止所拥有的,但它无法识别重复项。
name_list = ["Steve", "Steve", "Ben", "Ben", "Johnny"]
color_list = []
for document in db.favoriteColors.aggregate([
{"$match": {"name": {"$in": name_list }}},
{"$project": {"color": 1}}
]):
for k, v in document.iteritems():
color_list.append(v)
print color_list
# ["blue", "red", "green"]
【问题讨论】:
-
您能否创建
'name'->'color'的映射,然后使用该映射与name_list来构造颜色列表?我对 mongodb 知之甚少,不知道这是否可以有效地完成,但似乎可以......
标签: python mongodb dictionary pymongo aggregation-framework