8

Web ページから受け取ったデータを json として既存の MongoDB ドキュメントを更新するエレガントな方法を見つけようとしています。問題は、どのフィールドが更新されるかを事前に知らないことです。そのため、 set__field を使用できません。MongoDBドキュメントで更新するフィールドの json 表現しかありません。さらに、DynamicDocuments を使用しているため、ドキュメントに新しいフィールドが設定される可能性があります。例えば:

class Study(DynamicDocument):
    study_accession_nr = StringField()
    study_name = StringField()
    study_type = StringField()

json は次のようになります。たとえば、次のようになります。

{"_id" : "123", "study_name" : "Statistics"}

また

{"_id" : "123", "study_type" : "research", "study_name" : "Statistical analysis"} 

コンソールから、または pymongo を使用して簡単に実行できますが、手動で attr(myDocInstance, nameOfField, val) を設定しない限り、Mongoengine を使用してこれを行う方法がわかりません。ありがとう!

4

2 に答える 2

8

クラスを開始するときにデータを渡すだけです。

data = {"_id" : "123", "study_type" : "research", "study_name" : "Statistical analysis"}
doc = Study(**data)

既存のモデルを更新するには、update を呼び出す (推奨) か、モデルを変更して save を呼び出します。

例えば:

Doc.update(set__VAR=Val, set__VAR2=Val2)

または

setattr(Doc, 'VAR', val)
setattr(Doc, 'VAR2', val2)
Doc.save()

また

Doc.VAR = val
Doc.VAR2 = val2
Doc.save()
于 2013-03-14T11:48:44.280 に答える
1

通常のモンゴエンジン。私の場合、スキーマと同じ名前のフィールドを持つ x-editable からフォームを受け取るので、これを使用してデータベースに直接アクセスできます。

ActivityType.objects.filter(id=request.form['pk']).update(**{'set__'+request.form['name']: request.form['value']})
于 2014-03-13T02:41:24.750 に答える