MongoDB和Express - 对具有多个id的路由进行动态查询

时间:2017-08-04 21:52:15

标签: node.js mongodb express mongoose

App正在使用Node和Express,我有一个具有这种结构的MongoDB文档,来自db.users.find().pretty()

{
        "_id" : ObjectId("hash1"),
        "username" : "user1",
        "notes" : [
                {
                        "_id" : ObjectId("hash2"),
                        "data" : "This is note 1"
                }
        ],
}
{
        "_id" : ObjectId("hash3"),
        "username" : "user2",
        "notes" : [
                {
                        "_id" : ObjectId("hash4"),
                        "data" : "This is note 2"
                }
        ],
}

我需要删除notes子文档。

使用findByIdAndUpdatepull,路线为:

app.delete('/users/:id/notes/:id', callback );

和查询:

var fieldsToSet = {
  $pull: {notes: {_id: req.params.id}}
};
var options = { new: true };
req.app.db.models.User
  .findByIdAndUpdate(req.user._id, fieldsToSet, options, callback)

如果我以user1身份登录并希望删除带有hash2 ObjectId的注释(请将此视为MongoDB生成的真实哈希),我没有问题,但如果我仍然以user1我希望删除包含hash4的注释,但是我会收到user._id hash1。我不能两次使用req.params.id,它总会在最后:id返回给我。 如何动态获取两个id?

由于

1 个答案:

答案 0 :(得分:0)

你需要有两个不同的参数,这是有道理的,因为它们是两件事:

app.delete('/users/:userId/notes/:noteId', callback );

然后,您可以使用req.params.nodeIdreq.params.userId

访问所需的那个