Проверка существования поля внутри коллекции

Я хотел бы проверить, не существует ли значение внутри поля коллекции.

Я пробовал оба способа. Насколько я могу судить, после проверки, существует ли он, это сработало нормально:

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...


36
1

Ответ:

Решено

Ваш запрос не будет работать так, как вы этого хотите. Имена, которые не совпадают, всегда будут возвращены.

Проверка на несуществование просто обратна проверке существования:

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
}

Надеюсь это имеет смысл :)