如何在MongoDB中更改或更新其他集合的文档时更新一个集合中的文档

时间:2015-02-17 08:08:40

标签: php mongodb

我创建了两个集合“Users”和“Posts”。

用户文档结构如下:

{
    "_id": {
        "$oid": "54dde0e32a2a999c0f00002a"
    },
    "first_name": "Vamsi",
    "last_name": "Krishna",
    "email": "vamshi@test.com",
    "password": "5f4dcc3b5aa765d61d8327deb882cf99",
    "date_of_birth": "1999-01-05",
    "gender": "male",
    "status": "Active",
    "date_created": "2015-02-13 12:32:50"
}

虽然帖子文档结构是:

{
    "_id": {
        "$oid": "54e1a2892a2a99d00500002b"
    },
    "post_description": "Test post 1",
    "posted_by": {
        "id": "54dde0e32a2a999c0f00002a",
        "first_name": "Vamsi",
        "last_name": "Krishna",
        "gender": "male"
    },
    "posted_on": "2015-02-16 08:55:53",
    "comments": [],
    "likes": {
        "count": 0,
        "liked_by": []
    }
}

我的疑问是,当用户更新他的信息时,它应该反映出发布,评论和喜欢的所有地方。我怎样才能做到这一点?

我正在使用PHP。

谢谢!

1 个答案:

答案 0 :(得分:0)

Mongodb没有类似于sql on update cascade的概念,因此您必须在应用程序中执行此操作(每当您更新用户信息时,更新与其他集合中此用户相关的所有其他文档)。

正如您可能已经猜到的那样,当存在大量此类文档时,这是非常低效的,这意味着您的架构很糟糕。只需在文档中加userID即可链接到用户的收藏集。