2015-08-20 2 views
0
client = MongoClient() 
db = client['test'] 
connection = db['test'] 
conn.insert({"tags": ["first_1", "second_1"]}) 
conn.insert({"tags": ["first_2", "second_1"]}) 
conn.insert({"tags": ["first_3", "second_2"]}) 
print conn.distinct("tags") 

je suis arrivé en sortie:éléments d'agrégation distincts de la matrice par index

[u'first_1', u'second_1', u'first_2', u'first_3', u'second_2'] 

Comment puis-je faire cette opération que des seconds éléments du tableau? Je besoin de quelque chose comme:

[u'second_1', u'second_2'] 

Répondre

0

Selon docs$elemMatch, $slice et $ sont la seule façon de projeter des parties d'un tableau. À l'avenir, nous pouvons obtenir $slice fonctionnalité dans aggregate, voir this answer pour plus de détails. Mais maintenant, nous n'avons pas de façon directe de le faire avec seulement une requête mongo.
Code de travail:

position = 1 
field = "tags" 
# see https://stackoverflow.com/a/15798087/4249707 
# for "not_existent_field" explanation 
results = conn.find(
    {}, {field:{"$slice": [position,1]}, "_id": 0, "not_existent_field": 1} 
) 
distinct_results = {d[field][0] for d in results if field in d and d[field]}