2011-11-30 30 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还没有提供使用$位置运算符$推有道。