Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Mongoengine中将元素前置到列表中_Python_Mongodb_Mongoengine - Fatal编程技术网

Python 如何在Mongoengine中将元素前置到列表中

Python 如何在Mongoengine中将元素前置到列表中,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,Mongoengine可以通过附加元素将元素推送到列表中 BlogPost.objects(id=post.id).update_one(push__tags='nosql') 我想预先结束而不是追加,有办法吗 同一问题的另一个备选问题。 我可以像这样按位置查询列表 BlogPost.objects(tags__0='nosql') 有没有办法指定列表中的最后一个元素,比如python列表中的-1索引 BlogPost.objects(tags__-1='nosql')# ?.. I wis

Mongoengine可以通过附加元素将元素推送到列表中

BlogPost.objects(id=post.id).update_one(push__tags='nosql')
我想预先结束而不是追加,有办法吗

同一问题的另一个备选问题。
我可以像这样按位置查询列表

BlogPost.objects(tags__0='nosql')
有没有办法指定列表中的最后一个元素,比如python列表中的-1索引

BlogPost.objects(tags__-1='nosql')# ?.. I wish !
回答两个问题中的任何一个都能解决我的问题。
提前感谢。

这两种操作都不可能,但您可以通过使用另一个字段模拟对最后一个数组元素的访问来轻松解决这一问题。假设您的模型是:

class BlogPost(Document):
    tags = ListField(StringField())
    # other things
添加一个字段
last_标记

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

我唯一能够实现正确预处理的方法是使用pythonic方法,即预处理列表,然后保存文档。像这样:

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

不幸的是,MongoEngine for Python尚未为$push提供使用$position运算符的正确方法。

这种方法的问题还在于我必须复制最后的列表项,因为该项不是简单的字符串,而是一个巨大的嵌入式文档。