2017-04-14 19 views
1

私は照会したい地図フィールドを持っています。以下のような何か:DEVICE_ID::DeviceProfileオブジェクト分野におけるのでMongoengine:MapFieldを照会します。

class User(mongoengine.Document): 
    email = mongoengine.EmailField(required=False, unique=False) 
    username = mongoengine.StringField(max_length=30, min_length=6, required=True, unique=True) 
    password = mongoengine.StringField(max_length=500, min_length=6, required=True) 
    profiles = mongoengine.MapField(mongoengine.EmbeddedDocumentField(DeviceProfile)) 

プロファイル、私はそうのようなオブジェクトを格納します。

私は試しました:User.objects(profiles__device_id=device_id)をご利用いただけません。プロファイルフィールドに特定のキーを持つUserオブジェクトのみを返すようにクエリを行うにはどうすればよいですか?基本的には、デバイスIDに基づいて特定のDeviceProfileオブジェクトを含むUserドキュメントを照会したいと思います。

答えて

1

この問題に遭遇する他の人のためにここに残しておきます。

マップフィールドのキーでMongoengineドキュメントを取得するには、exists演算子を使用します。たとえば、クエリを構築することができ、その後、オブジェクトメソッドに渡さ:

は、任意の非ヌル、非ゼロ値が扱われるので、「通常の」クエリなどexistsオペレータが動作しない治療しますTrueと一致していれば、MapFieldに何かがある場合、一致するドキュメントが返されます。例:

Users.object(profiles__exists=key) 

空でないMapFieldを持つオブジェクトをすべて返します。