У меня проблемы с попыткой заставить 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 будут очень признательны, спасибо!