2012-01-30 34 views
21

Tôi đang cố gắng sử dụng trình điều khiển Java của MongoDB để thực hiện hai cập nhật ($ set và $ push) vào một bản ghi trong cùng một thao tác. Tôi đang sử dụng mã tương tự như sau:

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

Khi tôi kết hợp $ bộ và $ đẩy vào bản cập nhật tương tự thông qua một BasicDBList, tôi nhận được một IllegalArgumentException: "lĩnh vực lưu trữ trong db không thể bắt đầu với '$' (Phím Bad: '$ push') ".

Nếu tôi thực hiện hai cập nhật riêng biệt, cả pushUpdate và setUpdate đều tạo ra kết quả hợp lệ.

Cảm ơn!

Trả lời

40

Tôi không biết trình điều khiển Java, nhưng bạn có phải tạo danh sách ở đó không? Điều gì sẽ xảy ra nếu bạn thử mã này?

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

này nên sản xuất tương đương với

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

Trong khi mã nguồn sản xuất (tôi nghi ngờ) này:

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

Vậy là xong! Cám ơn rất nhiều! – HolySamosa

Các vấn đề liên quan