добавлен для отслеживания.

веденном ниже сценарии есть ошибка в синтаксисе mongo bulkWrite op:$setOnInsert: { count:0 }, является ненужным, и, следовательно, Mongo создает исключение: «Не удается обновить« count »и« count »одновременно».

Проблема в том, что драйвер node.js, похоже, его не ловит. Этот скрипт регистрирует "Успех!" на консоль.

(async () => {

  let db = await require('mongodb').MongoClient.connect('mongodb://localhost:27017/myNewDb');

  let mongoOps = [{
    updateOne: {
      filter: { foo: "bar" },
      update: {
        $setOnInsert: { count:0 },
        $inc: { count:1 },
      },
      upsert: true,
    }
  }];

  try {
    await db.collection("myNewCollection").bulkWrite(mongoOps);
    console.log("Success!");
  } catch(e) {
    console.log("Failed:");
    console.log(e);
  }

})();

Изучениеdb.system.profile.find({}) с участиемdb.setProfileLevel(2) мы можем видеть исключение:

{
    "op" : "update",
    "ns" : "myNewDb.myNewCollection",
    "query" : {
        "foo" : "bar"
    },
    "updateobj" : {
        "$setOnInsert" : {
            "count" : 0
        },
        "$inc" : {
            "count" : 1
        }
    },
    "keyUpdates" : 0,
    "writeConflicts" : 0,
    "numYield" : 0,
    "locks" : {
        "Global" : {
            "acquireCount" : {
                "r" : NumberLong(1),
                "w" : NumberLong(1)
            }
        },
        "Database" : {
            "acquireCount" : {
                "w" : NumberLong(1)
            }
        },
        "Collection" : {
            "acquireCount" : {
                "w" : NumberLong(1)
            }
        }
    },
    "exception" : "Cannot update 'count' and 'count' at the same time",
    "exceptionCode" : 16836,
    "millis" : 0,
    "execStats" : {},
    "ts" : ISODate("2017-10-12T01:57:03.008Z"),
    "client" : "127.0.0.1",
    "allUsers" : [],
    "user" : ""
}

Почему водитель глотает такие ошибки? Я определенно похож на ошибку, но я решил сначала спросить здесь, чтобы быть уверенным.

Ответы на вопрос(1)

Ваш ответ на вопрос