#node.js #mongoose
#node.js #мангуст
Вопрос:
Мне нужно удалить идентификатор пользователя из всех объектов в коллекции, кроме того, который был передан, в моем примере это значение: ‘Тата’, подскажите, как сделать такой запрос?
console.log(результат)
[
{
_id: 5fa702b2f18e5723b4c00d9f,
value: 'Тата',
vote: { '36e7da32-f818-4771-bb5e-1807b2954b5f': [Array] },
date: 2020-11-07T20:25:22.611Z,
__v: 0
}
]
console.log(req.body)
{ value: 'Тата', habalkaId: '36e7da32-f818-4771-bb5e-1807b2954b5f' }
console.log(req.user._id)
5f63a251f17f1f38bc92bdab
это все, что я мог сделать, просто найти
router.post('/', passport.authenticate('jwt', {session: false}), (req, res) => {
FirstName.find({value: req.body.value})
.then(result => {
if (result.length) {
console.log(result)
console.log(req.body)
console.log(req.user._id)
FirstName.find({value: {$ne: 'Слоник'}}, function (err, arr) {
arr.map(e => {
if (e.vote[req.body.habalkaId].length) {
if(e.vote[req.body.habalkaId].includes(String(req.user._id))){
console.log(e.vote[req.body.habalkaId])
}
}
})
})
} else {
new FirstName({
value: req.body.value,
vote: {[req.body.habalkaId]: [String(req.user._id)]}
}).save();
}
})
// res.json({res: req.body})
})
FirstName.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const FirstNameSchema = new Schema({
value: {
type: String
},
vote: {
type: Object
},
date: {
type: Date,
default: Date.now
}
});
module.exports = FirstName = mongoose.model('firstname', FirstNameSchema);
Комментарии:
1. Не могли бы вы опубликовать пример своей коллекции, пожалуйста?
2. добавлено, посмотрите в конце вопроса
Ответ №1:
Если я правильно понял, вы хотите что-то вроде этого:
db.collection.update({
"value": {
"$ne": "tata"
}
},
{
"$pull": {
"vote.array_name": "id_value"
}
},
{
multi: true
})
Прежде всего, найдите все документы, которые не совпадают value
с заданным. Затем для каждого найденного документа удалите объект из массива, используя $pull
, где id
заданные совпадения.
Пример здесь
Пожалуйста, проверьте поле оплаты и проверьте, правильно ли я использовал схему, и она показывает ожидаемый результат.
Комментарии:
1. «array_name»: [ { 0: «id_value» } ] это не массив объектов, а просто массив, который показывает компас, так что [ ‘5f63a251f17f1f38bc92bdab’ ] вот как это выглядит на самом деле
2. я пробую это FirstName.update({ «value»: { «$ ne»: «Тата» } }, { «$pull»: { «vote.36e7da32-f818-4771-bb5e-1807b2954b5f»: запрос пользователя. _id } }, { multi: true }), но не работают
3. хорошо, я нашел свою ошибку, FirstName.update({ «value»: { «$ne»: «Тата» } }, { «$pull»: { «vote.36e7da32-f818-4771-bb5e-1807b2954b5f»: Строка(req.user._id) } }, {multi: true }) вставьте его, пожалуйста, вместо вашего кода
4. Это правда, извините! Это
compass
результат. Я обновил ответ.