$set { "array.index.value" :"newvalue"} использовать что-то вместо индекса или использовать переменную

Я использую mongoose для хранения пользовательских данных, и одним из атрибутов являются элементы: [] в моем additems.js:

const User = require('../models/User');
var array = user.items
        array.indexOfObject = function (property, value) {
            for (let i = 0, len = this.length; i < len; i++) {
              if (this[i][property] === value) return i;
            }
            return -1;
          }
        let indexofarray = `items.${array.indexOfObject("item",`${item.name}`)}.quantity`
        User.findOneAndUpdate({username:"username"},
            {
               $set:{
                indexofarray: array.item.quantity++
               }
            }).then(err => {
                console.info(err)
            })

Я хочу увеличить количество данного элемента в массиве, который является прямым. Но я не знаю, где элемент будет находиться в массиве, поэтому мне нужно получить его с помощью функции. Но я не могу добавить это туда, потому что оно не принимает переменные или item.${array.indexOfObject("item",${item.name})}.quantity. Есть ли способ сделать это? Или другой способ добиться этого результата?

Любая помощь в правильном направлении помогает!

Это помогает? stackoverflow.com/questions/65619601/…

Joe 11.01.2023 04:49
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
0
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Итак, вы хотите обновить item.quantity для заданного item.name, где item — это массив.

Вы можете использовать $[]. Не нужно сначала искать индекс.

User.findOneAndUpdate(
{username: "username"},
{
    $inc:{"item.$[elem].quantity": 1}
},
{arrayFilters: [{"elem.name": "value"}]}
)

Демо

Что делать, если я не знаю имя элемента и мне нужно использовать переменную?

penguinpowers 11.01.2023 13:23

Я не знаю точного синтаксиса мангуста, но вы можете использовать переменную вместо "value".

Noel 11.01.2023 13:26

Да, это не то, что я хочу, я хотел указать элемент, который я меняю, потому что пользователь получает еще один из ящика.

penguinpowers 11.01.2023 13:40
Ответ принят как подходящий

Я нашел ответ в Интернете, который работает! просто все, что вам нужно сделать, это добавить скобки [], а затем переменную внутри или в кавычках, как я сделал.

$set: {
      [`item.${item}.quantity`]: quantity++
    }

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.

Community 12.01.2023 13:36

Другие вопросы по теме