我很难让Collection.upsert
在流星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对象的摘录。发生更新:
{ '$set':
{ 'account.id': 'trustmethisisvalidstring',
'account.username': 'ValidAccountNameString',
'account.nickname': 'ValidAccountNicknameString',
/* more name:values below this */
}
}
这是我的模式的摘录(同意: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的帮助或说明,谢谢!