Json MongoDB、NodeJS:使用新成员更新嵌入文档
使用:MongoDB和本机nodeJS MongoDB驱动程序 我试图解析fb graph api中的所有数据,将其发送到我的api,然后将其保存到我的DB中 将处理放入我的服务器:Json MongoDB、NodeJS:使用新成员更新嵌入文档,json,node.js,facebook,mongodb,mongodb-query,Json,Node.js,Facebook,Mongodb,Mongodb Query,使用:MongoDB和本机nodeJS MongoDB驱动程序 我试图解析fb graph api中的所有数据,将其发送到我的api,然后将其保存到我的DB中 将处理放入我的服务器: //Update user's data app.put('/api/users/:fbuser_id/:category', function(req, res) { var body = JSON.stringify(req.body); var rep = /"data":/;
//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更改为类别名称,例如:
放置到/api/users/000/likes会将数据键更改为likes:
{
"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": "XXXX@gmail.com",
"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
}
]
}
因此,问题在于,在本例中,我的api会像覆盖新发送的数据一样覆盖该字段,而不是将其附加到现有的数据文档中
我很确定我应该在更新中使用$put以外的其他参数,但是,我不知道是哪一个参数,也不知道如何通过编程将参数传递给它。用于将多个值附加到数组字段
var newLikes = [
{/* new item here */},
{/* new item here */},
{/* new item here */},
];
db.fbusers.update(
{ _id: req.params.fbuser_id },
{ $push: { likes: { $each: newLikes } } }
);
另请参见运算符,它会向数组中添加值,除非该值已存在,在这种情况下,$addToSet对该数组不起任何作用。是否尝试过push?是的,但是我需要以编程方式传递键和值。即使服务器运行,当数据发送到PUT路由处理程序时,我也会崩溃。很有可能是我的错误导致了它的崩溃。因此,我想看看其他人会如何处理这个问题