Начиная с MongoDB 2.4, больше нет необходимости полагаться на уникальный индекс (или любой другой обходной путь) для атомных findOrCreate
подобных операций.
Это благодаря $setOnInsert
оператор , новый для 2.4, который позволяет вам указывать обновления, которые должны выполняться только при вставке документов.
Это, в сочетании с опцией upsert
, означает, что вы можете использовать findAndModify
для достижения атомная findOrCreate
-подобная операция.
db.collection.findAndModify({
query: { _id: "some potentially existing id" },
update: {
$setOnInsert: { foo: "bar" }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
Поскольку $setOnInsert
влияет только на вставленные документы, если существующий документ найден, модификация не будет выполнена. Если документ не существует, он будет поддерживать один с указанным _id, а затем выполнить установку только вставки. В обоих случаях документ возвращается.
Если вы хотите вызвать функцию, просто вызовите ее так же, как и любую другую:
montarMenu(this);