$push и $set в одном обновлении MongoDB

Я пытаюсь использовать Java-драйвер MongoDB, чтобы сделать два обновления ($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: "поля, хранящиеся в БД, не могут начинаться с '$' (плохой ключ: '$push')".

Если я делаю два отдельных обновления, pushUpdate и setUpdate производят допустимые результаты.

спасибо!

1 ответов


Я не знаю Java driver, но вам нужно создать список там? Что произойдет, если вы попробуете этот код?

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