Должен быть стандартный способ проверки наличия документа и затем вставки, если он не существует. Это то, что мы все делаем, с самого начала. Но примеры там показывают только наполовину рутину. Я не понимаю. Поэтому я придумал следующий код. И по какой-то причине выполняются как if
, так и else
. Функция не вызывается дважды, поэтому ... почему это происходит?nodejs - выполняется как IF, так и ELSE
Выход:
Connected correctly to server
got doc
inserted doc
Disconnected from server successfully
Код:
// Use connect method to connect to the Server
mongoClient.connect(url, function (err, db) {
assert.equal(null, err);
console.log("Connected correctly to server");
var cursor = db.collection('mycoll').find(mydoc).limit(1);
// i need 'each' in order to test if doc exists.
// will execute once because i said limit 1.
cursor.each(function (err, doc) {
if (doc != null) {
console.log("got doc");
}
else {
mydoc.date_submit = new Date();
db.collection('mycoll').insertOne(mydoc, function (err, r) {
assert.equal(1, r.insertedCount);
console.log("inserted doc");
db.close();
console.log('Disconnected from server successfully');
});
}
});
});
Возможно, вы должны зайти в журнал с размером курсора –
, есть ограничение на 1 на курсоре, поэтому я могу понять, почему он не проверен, но да - зарегистрируйте размер курсора! – akaphenom
Вы ищете * upsert * операцию ...? Это обновляет документ, если найденный else вставляет новый. – deceze