具有嵌套值的流星更新语法

时间:2019-02-27 19:00:34

标签: mongodb meteor upsert simple-schema

我很难让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的帮助或说明,谢谢!

0 个答案:

没有答案