Мне нужно вставить документ, если он не существует. Я знаю, что опция "upsert" может это сделать, но у меня есть определенные потребности.
Сначала мне нужно создать документ только с его полем _id, но только если он еще не существует. Мое поле _id - это число, генерируемое мной (не ObjectId). Если я использую параметр "upsert", тогда я получаю "Mod on _id not allowed"
db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });
Я знаю, что мы не можем использовать _id в $set.
Итак, мой вопрос: если какой-либо способ "создать, если не существует" атомарно в mongodb?
EDIT: Как было предложено @Barrie, это работает (используя nodejs и mongoose):
var newUser = new User({ _id: id });
newUser.save(function (err) {
if (err && err.code === 11000) {
console.log('If duplicate key the user already exists', newTwitterUser);
return;
}
console.log('New user or err', newTwitterUser);
});
Но я все еще думаю, что это лучший способ сделать это.