Синтаксис Meteor Upsert с вложенными значениями - PullRequest
0 голосов
/ 27 февраля 2019

У меня проблемы с попыткой заставить Collection.upsert работать в Meteor 1.4.3.2.

Мое приложение извлекает активные списки с eBay и вставляет их в базу данных, если они еще не существуют,в противном случае он обновляет список, который уже сохранен.Итак, я пытаюсь описать следующее в метеорном методе:

let upsertObj = {$set: {}};

const account = ListingAccounts.findOne( ... );

if (!account) // throw an error because account info is required by schema

upsertObj.$set['account.id'] = account._id;
upsertObj.$set['account.username'] = account.username;
upsertObj.$set['account.nickname'] = account.nickname;

// ... also gets other listing data such as listingId, title, condition, etc...

return Listings.upsert({listingId: eBayListingID}, upsertObj);

Существуют другие значения, которые вложены аналогично деталям account выше, и все они, похоже, работают.Я зарегистрировал конечный объект upsertObj, и значения действительны и соответствуют моей схеме (SimpleSchema), но просто для примера приведу отрывок из последнего объекта upsert, который я регистрирую на сервере перед тем, как произойдет upsert:

{ '$set': 
    { 'account.id': 'trustmethisisvalidstring',
      'account.username': 'ValidAccountNameString',
      'account.nickname': 'ValidAccountNicknameString',
      /* more name:values below this */
    }
}

Вот выдержка из моей схемы (aldeed: simple-schema 1.5.3)

ListingsSchema = new SimpleSchema({
    account: {
        type: Object
    },
    "account.id": {
        type: String,
        optional: true // added after question asked
    },
    "account.username": {
        type: String,
        optional: true // added after question asked
    },
    "account.nickname": {
        type: String,
        optional: true // was always optional
    },
    ...
});

Я получаю сообщение об ошибке на клиенте со следующими данными: [{"name":"account.id","type":"required","value":null},{"name":"account.username","type":"required","value":null}]

по причине reason: "Id is required"

Я впервые пытаюсь использовать upsert и не могу удержаться от ощущения, что что-то упустил.Возможно, мой синтаксис выключен, или, может быть, я просто неправильно использую скобочные обозначения?Я не знаю, к сожалению, у документации по Meteor нет примеров, которые я мог бы найти.

Любая помощь или разъяснения по использованию Upsert будут очень признательны, спасибо!

...