根据_id字段操作ref mongo记录

时间:2014-08-08 21:08:43

标签: node.js mongodb mongoose mongoose-populate nosql

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

该应用还没有上线,所以这不是一个致命的错误。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

要将所有图书与populate共享,您可以执行此类操作,

user

如果您在Book.find({sharedWith:user1._id},function(err,docs){ }); 上使用index,则可以提高此查询的效率,但这取决于您的使用案例。