gpt4 book ai didi

json - MongoDB、NodeJS : updating an embedded document with new members

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:57 25 4
gpt4 key购买 nike

使用:MongoDB 和原生 NodeJS mongoDB 驱动程序。

我正在尝试解析来自 fb graph 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 将“data”键从发送的 json 更改为类别名称,例如:PUT 到/api/users/000/likes 会将“data”键更改为“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”以外的其他参数,但是,我不知道是哪一个以及如何以编程方式将参数传递给它。

最佳答案

使用$push with the $each modifier将多个值附加到数组字段。

var newLikes = [
{/* new item here */},
{/* new item here */},
{/* new item here */},
];

db.fbusers.update(
{ _id: req.params.fbuser_id },
{ $push: { likes: { $each: newLikes } } }
);

另请参阅$addToSet运算符,它将向数组添加一个值,除非该值已经存在,在这种情况下 $addToSet 对该数组不执行任何操作。

关于json - MongoDB、NodeJS : updating an embedded document with new members,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30478875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com