Проверка наличия поля внутри коллекции - PullRequest
0 голосов
/ 16 июня 2019

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

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

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');
  }
},

Спасибо за помощь!

1 Ответ

0 голосов
/ 16 июня 2019

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

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

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
}

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

...