问题描述
我正在使用MongoDB Realm构建应用程序。该应用程序将有关用户运动卡的信息(每个运动卡具有该用户唯一的cardId
)存储在一个集合中,然后进入并获取与每个运动卡相关的完整eBay列表(使用标题,玩家名称等)。来自记录),并将这些数据保存到单独的Mongo集合以及cardId
中。
此过程有效(尽管可能是我的劣质代码!),Mongo中的文档如下所示:
{
"_id": {
"$oid": "5f6a5bda82c81067eac32da6"
},"itemId": "174428279769","cardId": [
"Was-Ant-5281"
],"galleryURL": "https://thumbs2.ebaystatic.com/m/m1heSnR2qz5NbPw7mCxQhkg/140.jpg","title": "2020 Black Silver Ink 3-Color Rookie Patch Auto #229 Antonio Gibson #54//99"
}
因为另一个用户生成一个返回相同ebay itemId
的ebay API请求是可行的,所以在我的代码中,我试图检查是否存在具有相同itemId
的记录,以及是否存在将cardId
添加到数组中,而不是生成新文档。
我在SO上读过一些类似的问题,这些问题建议我可以将$addToSet
与$set
一起使用,但是当我尝试这样做时,会出现诸如uncaught promise rejection: multiple write errors: [{write errors: [{Updating the path 'cardId' would create a conflict at 'cardId'}]},{<nil>}]
之类的错误。
exports = async function(payload) {
const axios = require("axios");
const mongodb = context.services.get("mongodb-atlas");
const eventsdb = mongodb.db("cards");
const eventscoll = eventsdb.collection("ebay-prices");
//////////// Get a list of a users cards from the cards collection
var collection = context.services.get("mongodb-atlas").db("cards").collection("stuart collection");
var ownedCards = await collection.find({
forTrade: "Yes"
}).toArray();
for (let card of ownedCards) {
// make the ebay API call based on card brand,card series and player name
let url = "http://svcs.ebay.com/services/search/FindingService/v1?GLOBAL-ID=EBAY-US&REST-PAYLOAD&keywords=" + card.brand + " " + card.series + " " + card.player +
"&itemFilter(0).name=SoldItemsOnly&itemFilter(0).value=true&OPERATION-NAME=findCompletedItems&paginationInput.entriesPerPage=6&paginationInput.pageNumber=1&RESPONSE-DATA-FORMAT=json&Security-APPNAME=<MyAPPID>&SERVICE-NAME=FindingService&SERVICE-VERSION=1.12.0";
let cardId = card.card_id;
axios
.get(url)
.then(resp => {
for (const item in resp.data.findCompletedItemsResponse[0].searchResult[0].item) {
const itemId = resp.data.findCompletedItemsResponse[0].searchResult[0].item[item].itemId[0];
const title = resp.data.findCompletedItemsResponse[0].searchResult[0].item[item].title[0];
const galleryURL = resp.data.findCompletedItemsResponse[0].searchResult[0].item[item].galleryURL[0];
const result = eventscoll.updateOne({
itemId: itemId
},{
// $addToSet: { cardId: { $each: cardId } },$set: {
itemId: itemId,title: title,cardId: [cardId],galleryURL: galleryURL
}
},{
upsert: true
})
}
})
}
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)