我在一个名为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
一起构建color_list
?我对 MongoDB 不够了解,不知道是否可以高效地完成,但似乎是可以的... - mgilson