Использование: MongoDB и собственный драйвер nodeJS mongoDB.MongoDB, NodeJS: обновление встроенного документа с новыми членами
Я пытаюсь разобрать все данные из графика fb api, отправить его в свой API и затем сохранить его в моей БД.
обработки в моем сервере PUT:
//Update user's data
app.put('/api/users/:fbuser_id/:category', function(req, res) {
var body = JSON.stringify(req.body);
var rep = /"data":/;
body = body.replace(rep, '"' + req.params.category + '"' + ':');
req.body = JSON.parse(body);
db.fbusers.update({
id: req.params.fbuser_id
}, {
$set: req.body
}, {
safe: true,
multi: false
},
function(e, result) {
if (e) return next(e)
res.send((result === 1) ? {
msg: 'success'
} : {
msg: 'error'
})
});
});
Я посылаю в то время, 25 элементов, и этот код просто переопределяет вместо обновления документа.
данных Я посылаю к API:
{
"data": [
{
"category": "App page",
"name": "SoundCloud",
"id": "7919071058",
"created_time": "2013-09-16T18:16:59+0000"
},
{
...and so on
}
]
}
В основном мои изменения API "данных" ключ от посланного JSON на название категории, Fe: PUT к/API/пользователей/000/любит будет измените ключ «данные» на «любит»:
{
"likes": [
{
"category": "App page",
"name": "SoundCloud",
"id": "7919071058",
"created_time": "2013-09-16T18:16:59+0000"
},
{
...and so on
}
]
}
Затем этот JSON помещается в отсек.
Иерархия в MongoDB:
{
"_id": ObjectID("556584c8e908f0042836edce"),
"id": "0000000000000",
"email": "[email protected]",
"first_name": "XXXXXXXX",
"gender": "male",
"last_name": "XXXXXXXXXX",
"link": "https://www.facebook.com/app_scoped_user_id/0000000000000/",
"locale": "en_US",
"name": "XXXXXXXXXX XXXXXXXXXX",
"timezone": 3,
"updated_time": "2015-05-26T18:11:59+0000",
"verified": true,
"likes": [
{
"category": "App page",
"name": "SoundCloud",
"id": "7919071058",
"created_time": "2013-09-16T18:16:59+0000"
},
{
"category": "App page",
"name": "SoundCloud",
"id": "7919071058",
"created_time": "2013-09-16T18:16:59+0000"
},
{
....and so on
}
]
}
Таким образом, проблема в том, что мой апи перекрывает поле (в данном случае «любит») с недавно переданных данных, а не добавляя его в уже существующий документ с данными.
Я уверен, что я должен использовать другой параметр, чем «$ put» в обновлении, однако я понятия не имею, какой из них и как передать параметры программно.
Вы пробовали с толчком? http://docs.mongodb.org/manual/reference/operator/update/push/ – Antonio
Да, однако мне нужно передавать ключи и значения программно. Несмотря на то, что сервер работает - я получаю сбои, когда данные отправляются в обработчик маршрута PUT. Существует высокая вероятность того, что он падает из-за моей ошибки хе. Таким образом, я хотел бы посмотреть, как другие люди подходят к этой проблеме – gedasp