2

Mongoengine は、要素を追加することでリストに要素をプッシュできます

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

追加する代わりに前に追加したいのですが、方法はありますか?

同じ問題に対する別の代替質問..
このような位置でリストを照会できます

BlogPost.objects(tags__0='nosql')

-1 index in python lists のように、リストの最後の要素を指定する方法はありますか?

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

2 つの質問のいずれかに回答すると、問題が解決します。前もって感謝します。

4

2 に答える 2

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、頻繁にクエリを実行する場合も同様です。

于 2011-11-30T13:25:21.850 に答える
1

適切な先頭に追加することができた唯一の方法は、リストに先頭に追加してからドキュメントを保存する Pythonic の方法を使用することでした。そのようです:

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

残念ながら、Python 用の MongoEngine は、$push に $position 演算子を使用する適切な方法をまだ提供していません。

于 2015-06-28T11:49:57.877 に答える