Я хотел бы проверить, не существует ли значение внутри поля коллекции.
Я пробовал оба способа. Насколько я могу судить, после проверки, существует ли он, это сработало нормально:
if (Characters.findOne({name:name})) {
{throw new Meteor.Error('name exists');} };
Выдает ошибку при вводе имени, которое уже существует.
Теперь наоборот я попробовал
if ( Characters.find( { name: { $not: { $eq: name } } } ) ) {
{throw new Meteor.Error('name doesn't exist');}
};
Я ожидал, что ошибка возникнет только в том случае, если будет указано несуществующее имя. Я, конечно, прокомментировал первый код. Но он также выдал ошибку, когда было передано существующее имя.
Я пробовал много разных операторов, но результат всегда был один и тот же.
Редактировать
Я попробовал предложенный способ, и это сработало!
Дело: Имя существует:
Meteor.methods({
'characters.start'(name) {
check(name, String);
if (Characters.findOne({name})) {
throw new Meteor.Error('name exists');
} else {
return Characters.insert({
name,
owner: Meteor.user().username,
ownerId: Meteor.userId(),
});
}
},
Случай: Имя не существует:
Meteor.methods({
'characters.start'(name) {
check(name, String);
if (Characters.findOne({name})) {
return Characters.insert({
name,
owner: Meteor.user().username,
ownerId: Meteor.userId(),
});
} else {
throw new Meteor.Error('name exists');
}
},
Спасибо за помощь!
🤔 А знаете ли вы, что...
MongoDB предоставляет инструменты для мониторинга и администрирования, такие как MongoDB Compass...
Ваш запрос не будет работать так, как вы этого хотите. Имена, которые не совпадают, всегда будут возвращены.
Проверка на несуществование просто обратна проверке существования:
if (Characters.findOne({name})) {
throw new Meteor.Error('name exists');
} else {
// It wasn't found, therefore it doesn't exist
// - so you can create it now
}
Надеюсь это имеет смысл :)