0

DB からドキュメントを取得し、これを除外する他のドキュメントを選択する必要があります。次のクエリを試しました:

{'email': u'test@mail.com', 'id': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}
{'email': u'test@mail.com', 'pk': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}

{'email': u'test@mail.com', '_id': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}

最後の 1 つは MongoDB コンソールの有効なクエリで、最初の 2 つはクエリ オブジェクトに渡そうとしたクエリで、エラー メッセージが表示されて失敗しました。

>>>User.object.query(my_query)

ValidationError: {'$ne': ObjectId('51f7f13fca798933a0c70f69')} is not a valid ObjectId

修正方法は?

4

2 に答える 2

7

最初の 2 つのクエリが有効でない理由として考えられるのは、存在しないフィールドです: 'id', 'pk'. id: の前のアンダースコアに注目してください_id

私のコンソールでは、これは有効なクエリです:

db.user.find( { 'email' : 'test@mail.com', '_id' : { '$ne' : ObjectId("51d41232ccf2f1a165a92ca6")} } )

編集これが解決策です:

User.objects.filter(email = 'test@mail.com').filter(id__ne="51f7f13fca798933a0c70f69")

ロングバージョン

これを mongoengine python モジュール バージョン 0.8.4 でテストしたので、次のコード行を実行してみます。

>>>User.object.query(my_query)

まず、Documentobjectクラスには属性がなく、 がありますobjects。次に、objectsQuerySet、メソッドがありませんquery。mongoengine でできることは次のようなものです。

>>> res = User.objects.filter(email = 'email51@acme.com')
>>> res[0].email
u'email51@acme.com'

そしてポイントへ!このクエリは、同じエラーとして返されます。

User.objects.filter(email = 'email51@acme.com').filter(id__ne="ObjectId('51d41232ccf2f1a165a92cab')")
mongoengine.errors.ValidationError: ObjectId('51d41232ccf2f1a165a92cab') is not a valid ObjectId

これは正しい言い方です:

User.objects.filter(email = 'email51@acme.com').filter(id__ne="51d41232ccf2f1a165a92cab")
于 2013-08-23T11:13:49.517 に答える