为 RESTful 应用程序设计 mongo 'schema'

Designing mongo 'schema' for RESTful application

我正在尝试通过编写应用程序自学 mongo,并且我正在努力寻找设计 mongo 'schema' 的最佳方法(我知道它是无模式的,但这可能是我理解的核心问题,因为我来自关系背景)

无论如何,该应用程序是一个礼品列表管理器,用户可以在其中创建一个礼品列表并将他们想要收到的礼品添加到他们的列表中。其他用户可以订阅列表,并可以将礼物列表中的礼物标记为claimed/purchased。 (以免圣诞节收到重复礼物的问题!)

目前我的 GiftLists 集合不是 'relational',而只是 GiftList 文档的集合以及 Gifts 的子文档,如下所示:

{
    "GiftLists": [
        {
            "_id": {
                "$oid": "55e9924848c4ffd723890b48"
            },
            "description": "Xmas List for Some User",
            "gifts": [{
                "description": "Mongo book"
                "claimed": false
            },
            {
                "description": "New socks"
                "claimed": false
            },
            {
                "description": "New socks"
                "claimed": false
            }],
            "owner": "some.user",
            "subscribers": ["some.other.user", "my.friend"]
        }
    ]
}

想法是 some.user 是礼物清单的所有者,并添加了 3 件他想收到的物品。 some.other.user 已订阅列表并可以查看礼物列表及其礼物。他可能会选择购买其中一件礼物,因此需要将其标记为已领取,这样 my.friend 就不会也购买了。

目前,gifts 数组中的每个 Gift 都是 sub-document,没有自己的 id,我认为这就是我陷入 understanding/thinking.[=31= 的地方]

我正在尝试通过 RESTful 界面提供应用程序功能。

考虑到以上几点,我自然而然的下一步是能够将礼物标记为已领取,也许是:

所以也许我的 url 应该是:

或者我可能会尝试使用商品的描述

或者我可以参考礼物清单

或者我参考了礼物的索引

对我来说真正的感觉是我需要另一个集合,只是为了礼物,其中每个礼物文档都有自己的 id,然后我可以在我的 RESTful url 中引用它.并且要么 Gift 引用了它的 parent GiftList,要么 GiftList 引用了一组 Gifts
但这完全是一种非常 'relational' 的思维方式……不是吗?

最好的方法是什么?或者,如果没有 'best' 方法,我有什么选择?

您可以使用新集合来解决这个问题,或者您可以为每个列表条目添加一个唯一标识符字段。唯一标识符的 MongoDB 解决方案正在生成 ObjectId,就像用于文档 _id 字段的那些一样。大多数 MongoDB 数据库驱动程序应该公开生成 ObjectId 的功能。有关详细信息,请参阅您的数据库驱动程序的文档。