gpt4 book ai didi

javascript - 如何将带有 "$"字段的 JSON 对象插入 Meteor 集合中?

转载 作者:行者123 更新时间:2023-12-03 04:45:24 24 4
gpt4 key购买 nike

我正在从 Amazon API 检索有关图书的数据并将其存储为 JSON 对象。然后我想将此数据插入到 Meteor 集合中。但是,JSON 数据中的某些字段以“$”字符开头,这会导致此错误:

MongoError:“result.results.0.ItemAttributes.0.ManufacturerMaximumAge.0.$”中的美元 ($) 前缀字段“$”对于存储无效。

鉴于数据包含“$”符号,我需要帮助将数据插入到集合中。如果这是不可能的,有没有办法删除 JSON 数据中所有出现的“$”,然后将其存储到 Meteor 集合中?下面是我的代码,给定书名和作者,它搜索 Amazon API 并返回有关前 10 个结果的信息:(SearchResult 是对集合的引用)

    Meteor.methods({
itemSearch(appUUID,title, author) {
var result = {};
result.search = {
appUUID: appUUID,
title: title,
author: author
}
client.itemSearch({
title: title,
author: author,
searchIndex: 'Books',
responseGroup: 'ItemAttributes, Images'
}).then(function(results){
result.results = results;
var upsertResult = SearchResult.upsert( {
appUUID: appUUID,
title: title,
author: author,
},
{
$set: {result: result}
}
);
}).catch(function(err){
SearchResult.upsert({
appUUID: appUUID,
title: title,
author: author,
},
{
$set: {result: result }
}
);
});

}
});

这是 JSON 数据,“单位”之前的美元符号是导致问题的原因。

"Width": [
{
"_": "810",
"$": {
"Units": "hundredths-inches"
}
}
]

最佳答案

简单的答案是,不,您不能在 MongoDB 中的字段中使用 $(来自 the docs ):

The field names cannot start with the dollar sign ($) character.

有很多可能的解决方案可以将数据更改为 MongoDB 可以接受的格式,但为了给您提供我能想到的最简单的解决方案,您可以只映射对象的键。例如,使用 lodash's mapKeys function :

data = _.mapKeys(data, (value, key) => {
if(key === '$') {
return 'some_custom_key'
} else {
return key
}
})

这会将您的所有 $ 更改为 some_custom_key。只要你有钩子(Hook)(例如 Mongoose 的 pre save 中间件和 post read 中间件 docs )可以在后台为你转换它,它应该是一个有点可行的解决方案。

我不知道这是否可能,但更好的解决方案是让 Amazon API 为您提供不带 $ 的数据,但我无法推测这一点,因为我不熟悉使用该 API。

关于javascript - 如何将带有 "$"字段的 JSON 对象插入 Meteor 集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42893144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com