37

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);

$set と $push を BasicDBList を介して同じ更新に組み合わせると、IllegalArgumentException が発生します。

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

ありがとう!

4

2 に答える 2

58

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}}]);
于 2012-01-30T21:45:52.257 に答える