我正在用i18n制作一个小网站。在开始时我使用了本地json文件,但在切换到mongodb之后我遇到了一个我不明白的错误。非常感谢一个很好的解释。
我得到的错误是:
TypeError:在不兼容的接收器[object Object]
上调用的方法Uint8Array.length
用“da”和“en”属性构造i18n数据。然后我使用一种方法来过滤相关语言。
以下是我的数据示例,包括json和相应的mongoose结果。两者都从终端复制(用console.log
打印):
JSON
[ { lang: { da: 'Dansk', en: 'Danish' }, rating: 5 },
{ lang: { da: 'Engelsk', en: 'English' }, rating: 5 },
{ lang: { da: 'Tysk', en: 'German' }, rating: 5 } ]
猫鼬
[ { _id: 57e2561369e4bc0a8ca6c630,
lang: { da: 'Dansk', en: 'Danish' },
rating: 5,
id: '57e2561369e4bc0a8ca6c630' },
{ _id: 57e2561369e4bc0a8ca6c631,
lang: { da: 'Engelsk', en: 'English' },
rating: 5,
id: '57e2561369e4bc0a8ca6c631' },
{ _id: 57e2561369e4bc0a8ca6c632,
lang: { da: 'Tysk', en: 'German' },
rating: 5,
id: '57e2561369e4bc0a8ca6c632' } ]
filterLanguage方法
var traverse = require('traverse');
var filterLanguage = function(language, obj) {
return traverse(obj).map(function (item) {
if (this.key === language) {
this.parent.update(item);
}
});
};
所以filterLanguage('da', languages);
应该返回类似的内容:
[ { lang: 'Dansk', rating: 5 },
{ lang: 'Engelsk', rating: 5 },
{ lang: 'Tysk', rating: 5 } ]
filterLanguage()
适用于本地有效的JSON文件,但不适用于Mongoose结果集......
我试过了JSON.stringify(obj)
。我也尝试在Mongoose模型中设置toObject()
方法,但没有运气。
我做错了什么,如何解决?
---------编辑---------
模型
var mongoose = require('mongoose');
var languageSchema = mongoose.Schema({
local: {
lang: { da: String, en: String },
rating: Number
}
});
module.exports = mongoose.model('Language', languageSchema);
查询
language.find({}, function(err, results) {
var obj = filterLanguage(lang, results.languages);
console.log(obj);
});
我尝试在架构上设置toObject
,如下所示:
languageSchema.set('toObject', { virtuals: true });
答案 0 :(得分:1)
您收到的错误与traverse
无法处理ObjectId
数组中的results
个实例有关。
由于您似乎没有使用_id
或id
,因此解决此问题的最简单方法是从结果文档中排除这些属性:
language.find({}, '-_id -id', function(err, results) { ... })
(-id
可能是多余的,因为它是依赖于_id
的虚拟