0

好的,所以我在 MEAN 应用程序(节点、猫鼬、mongo)中有一个非常简单的数据库设置,其中我有 Book 记录和用户记录。一本书有一个所有者,并且可以有任意数量的共享用户,这些用户存储在一个名为 sharedWith: 的字段中的数组中。最初,我使用电子邮件地址作为 _id 字段来存储用户记录。我现在意识到这对我来说是一个愚蠢的举动,因为如果有人想更改他们的电子邮件地址,它实际上会将他们从他们的书籍中删除。

该应用程序尚未上线,因此这不是一个致命的错误。

我的问题是,一旦我将用户文档恢复为使用 _id 的原始哈希值,并将这些值存储在书籍文档中的 Owner 和 sharedWith 字段中,我是否必须查询每个哈希才能检索实际可用的用户数据?

我知道 mongoose 有一个 .populate() 方法可以解析子文档,但是对于插入它们呢?我会将用户发布为电子邮件地址,然后查询每个用户并存储生成的哈希值吗?我可以手动执行此操作,但我想确保在数据库本身中没有一些秘密的 mongo-sauce 可以执行此操作。

谢谢!

4

1 回答 1

2

如果您_id在前端有可用的user. _id您可以通过将 添加到一本书的sharedWith数组中来直接与他分享一本书。但是,如果您_id在前端没有可用用户的 ,则需要_id通过查询手动获取email,然后将 存储_idsharedWith. 至于检索书籍,populate确实是获取用户数据的最佳选择。

为了让所有的书与你共享,user你可以做这样的事情,

Book.find({sharedWith:user1._id},function(err,docs){ });

index如果您使用on ,则此查询可以提高效率,sharedWith但这取决于您的用例。

于 2014-08-09T07:45:54.240 回答