更新MongoDB中的多个嵌套的用户输入数组值

时间:2017-11-09 12:18:13

标签: javascript json database mongodb backend

简而言之,我正在尝试获取用户输入并相应地从数据库进行更改。用户输入咖啡馆编号,他们想要更改文本的图像编号以及将根据浏览器语言显示在前端的2种不同语言翻译。我处理了更改语言部分,但我似乎无法使用用户输入更改嵌套的JSON数组变量。

有问题的JSON就是这样,对它下面的变量的解释

var items = {
    'lg' : cafeNumber,
    'img': {
             imgNumber: {
                            'english': enText,
                            'german': deText
                        }
            }
     }

我在这里做的是:获取咖啡馆号码cafeNumber的用户输入。接下来,我获得了用imgNumber想要更改的图像编号的用户输入。

这是它变得棘手的部分。我们在系统中有多个图像,每个图像都有2个需要输入的翻译。因此,必须使用img输入imgNumber字符串,并且每个imgNumber必须有2种不同的翻译。

所以我要问下enTextdeText的翻译。然后让他们提交表格。这些操作都是通过单个提交/发布操作完成的。所以他们填写表格,按提交并开始后期行动。

问题出现在我无法将imgimgNumber匹配的地方。 imgNumber只是以字符串形式返回。

如果我将insert方法与items变量一起使用,它就可以了。但是,如果我尝试update方法 - 实际上我需要的方法 - 手动使用findfindOneAndUpdate方法,我似乎无法使其正常工作。

我四处搜索,似乎$运算符无法更新多个变量。关于如何解决这个问题的任何建议?

我试过的一些片段

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'是字符串名称,enTextdeText是用户自己输入。

这是主要的,整个过程是这样的,用户可以在他们想要的任何图像上更改英语和德语文本,图像本身已经在服务器上。因此,代码应找到匹配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
         }

可以有任意数量的图像,因此用户必须自己输入哪些图像将更改其文本。

0 个答案:

没有答案