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