Мне нужно вставить документ, если он не существует. Я знаю, что вариант "upsert" может сделать это, но у меня есть некоторые особые потребности.
Сначала мне нужно создать документ только с его полем _id, но только если он еще не существует. Мое поле _id - это число, сгенерированное мной (не ObjectId). Если я использую опцию «upsert», то получаю «Mod on _id not позволен»
db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });
Я знаю, что мы не можем использовать _id в наборе $.
Итак, мой вопрос: есть ли какой-нибудь способ «создать, если не существует» атомарно в 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);
});
Но я все еще задаюсь вопросом, является ли это лучшим способом сделать это.