2011-11-30 51 views
1

Mongoengine可以通過附加它們如何元素預先考慮到列表中Mongoengine

BlogPost.objects(id=post.id).update_one(push__tags='nosql') 

我自己添加的,而不是附加的滑動元件清單,有沒有辦法?

另一個可選的問題同樣的問題..
我可以在列表中的位置,這樣

BlogPost.objects(tags__0='nosql') 

查詢是否有指定列表的最後一個元素的方式,就像在-1指數python列表?

BlogPost.objects(tags__-1='nosql')# ?.. I wish ! 

任何兩個問題的答案將解決我的問題。 在此先感謝。

+0

另請參閱http://groups.google.com/group/mongoengine-users/browse_thread/thread/ab05888b36d1465e – dcrosta

回答

1

這兩種操作都是不可能的,但您可以通過模擬對另一個字段的最後一個數組元素的訪問來相當容易地解決它。假設你的模式是:

class BlogPost(Document): 
    tags = ListField(StringField()) 
    # other things 

添加一個字段last_tag

class BlogPost(Document): 
    tags = ListField(StringField()) 
    last_tag = StringField() 
    # other things 

然後,在更新時:

BlogPost.objects(id=post.id).update_one(push__tags='nosql', set__last_tag='nosql') 

和查詢時:

BlogPost.objects(last_tag='nosql') 

你想要確保last_tag已編入索引,並且如果您也經常查詢,也可能編號爲tags

+0

此方法的問題在於我必須複製最後一個列表項,因爲該項不是簡單的字符串,它是一個巨大的嵌入式文檔。 – Radian

0

我能夠實現一個適當的前置程序的唯一方法是使用pythonic的方式prepending到列表,然後保存文檔。像這樣:

blog_post = BlogPost.objects.get(id=post.id) 
blog_post.tags.insert(0,'nosql') 
blog_post.save() 

不幸MongoEngine爲Python還沒有提供使用$位置運算符$推有道。