2012-01-30 4 views
21

MongoDBのJavaドライバを使用して、同じ操作で2つの更新($ setと$ push)をレコードに追加しようとしています。私は、次のようなコードを使用しています:

BasicDBObject pushUpdate = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital)); 
    BasicDBObject setUpdate = new BasicDBObject().append("$set", new BasicDBObject().append("endTime", time)); 
    BasicDBList combinedUpdate = new BasicDBList(); 
    combinedUpdate.add(pushUpdate);   
    combinedUpdate.add(setUpdate); 


    collection.update(new BasicDBObject().append("_id", pageId), combinedUpdate, true, false); 

私は$セットを組み合わせて、$ BasicDBList経由同じ更新にプッシュすると、私は、IllegalArgumentExceptionを取得:「DBに保存されているフィールドがで始めることはできません。 '$'(バッドキー: '$ push') "

2つの別々の更新を行う場合、pushUpdateとsetUpdateの両方が有効な結果を生成します。

ありがとう!

答えて

40

私はJavaドライバを知らないが、そこにリストを作成する必要がありますか?このコードを試してみるとどうなりますか?

BasicDBObject update = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital)); 
update = update.append("$set", new BasicDBObject().append("endTime", time)); 

collection.update(new BasicDBObject().append("_id", pageId), update, true, false); 

あなたのコードが生成するのに対してこれは(私が疑われる)

db.collection.update({_id: pageId}, {$push: {values: dboVital}, $set: {endTime: time}}); 

と同等のものを生成する必要があります:

db.collection.update({_id: pageId}, [{$push: {values: dboVital}}, {$set: {endTime: time}}]); 
+1

それだそれ!本当にありがとう! – HolySamosa

関連する問題