简而言之,我正在尝试获取用户输入并相应地从数据库进行更改。用户输入咖啡馆编号,他们想要更改文本的图像编号以及将根据浏览器语言显示在前端的2种不同语言翻译。我处理了更改语言部分,但我似乎无法使用用户输入更改嵌套的JSON数组变量。
有问题的JSON就是这样,对它下面的变量的解释
var items = {
'lg' : cafeNumber,
'img': {
imgNumber: {
'english': enText,
'german': deText
}
}
}
我在这里做的是:获取咖啡馆号码cafeNumber
的用户输入。接下来,我获得了用imgNumber
想要更改的图像编号的用户输入。
这是它变得棘手的部分。我们在系统中有多个图像,每个图像都有2个需要输入的翻译。因此,必须使用img
输入imgNumber
字符串,并且每个imgNumber
必须有2种不同的翻译。
所以我要问下enText
和deText
的翻译。然后让他们提交表格。这些操作都是通过单个提交/发布操作完成的。所以他们填写表格,按提交并开始后期行动。
问题出现在我无法将img
与imgNumber
匹配的地方。 imgNumber
只是以字符串形式返回。
如果我将insert
方法与items
变量一起使用,它就可以了。但是,如果我尝试update
方法 - 实际上我需要的方法 - 手动使用find
或findOneAndUpdate
方法,我似乎无法使其正常工作。
我四处搜索,似乎$
运算符无法更新多个变量。关于如何解决这个问题的任何建议?
我试过的一些片段
db.collection('cafe').update({
"lg": cafeNumber
}, {
"img": {
imgNumber: [{
"de": deText,
"en": enText
}]
}
}
})
不是很整洁,但我正在尝试每一个选项(虽然我一步一步地记录了它,但似乎每个步骤都返回相同的doc所有变量,所以这可能没用)
db.collection('cafe').findOne({
'lg': cafeNumber
}, function (err, doc) {
if (err) throw err;
if (doc) {
db.collection('cafe').findOne({
'img': imgNumber
}, function (err, doc) {
if (err) throw err;
if (doc) {
db.collection('cafe').update({
'english': enText... etc.etc.
按请求编辑,也是TL; DR:
结构如下:
每家咖啡馆都有一个独特的cafeNumber
。这决定了哪个咖啡馆是哪个。
'lg'
是数据库中的字符串名称,cafeNumber
是用户输入的变量。
在这些咖啡馆条目中,有多个图像。 'img'
是数据库中的字符串名称,imgNumber
是用户输入的变量。
现在,在这些'img'
中,有2个变量:'english'
和'german'
是字符串名称,enText
,deText
是用户自己输入。
这是主要的,整个过程是这样的,用户可以在他们想要的任何图像上更改英语和德语文本,图像本身已经在服务器上。因此,代码应找到匹配cafeNumber
的用户输入,然后找到匹配图像的用户输入,然后使用用户输入的任何输入更新'english'
和'german'
文本。
现在我想到了'img'
标签。
我想要创建的示例结构是:
'_id': 'blabla',
'lg': '1', //1 is input by user
'img': '2' //2 is also input by user
{
'english': 'myWord' //myWord is input by user
'german': 'dontknowgerman' //dontknowgerman is input by user
},
'img': '3' //3 is input by user
{
'english': 'lorem' //lorem is input by user
'german': 'ipsum' //ipsum is input by user
}
可以有任意数量的图像,因此用户必须自己输入哪些图像将更改其文本。