Я использую 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. Есть ли способ сделать это? Или другой способ добиться этого результата?
Любая помощь в правильном направлении помогает!
Итак, вы хотите обновить item.quantity для заданного item.name, где item — это массив.
Вы можете использовать $[]. Не нужно сначала искать индекс.
User.findOneAndUpdate(
{username: "username"},
{
$inc:{"item.$[elem].quantity": 1}
},
{arrayFilters: [{"elem.name": "value"}]}
)
Демо
Что делать, если я не знаю имя элемента и мне нужно использовать переменную?
Я не знаю точного синтаксиса мангуста, но вы можете использовать переменную вместо "value".
Да, это не то, что я хочу, я хотел указать элемент, который я меняю, потому что пользователь получает еще один из ящика.
Я нашел ответ в Интернете, который работает! просто все, что вам нужно сделать, это добавить скобки [], а затем переменную внутри или в кавычках, как я сделал.
$set: {
[`item.${item}.quantity`]: quantity++
}
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Это помогает? stackoverflow.com/questions/65619601/…