不使用Schema.ObjectId在mongoose中实现DB-ref?

3

在我的代码中人们可以关注其他人。 到目前为止一切都正常,除了这个事实:在用户方案中我有这个字段。

, following: [{ type: Schema.ObjectId, ref: 'Users' }]

由于每个用户都有一个用户名,使用带有用户名的dbref更加灵活。是否有一种类似这样的方法?

, following: [{ type: Users.username, ref: 'Users' }]

非常感谢,g。
3个回答

3
不,只有引用另一个集合的_id属性的ObjectId值可以用作引用。
源代码中经过确认。

难道没有任何可行的解决方法吗?因为我必须搜索文件才能获得名称,这样会浪费很多内存:( - piggyback

3
你只能像第一个代码片段那样使用 ObjectId 引用到集合中。
[{ type: Schema.ObjectId, ref: 'Users' }]

当使用populate()进行查询时,您可以指定要返回的字段。在您的情况下,它可能看起来像这样:
User.find({}).populate('following', 'username').exec(function(err,doc) {});

每个在下面数组中的对象看起来像
{ _id: 'xxxxxxxxxx', username: 'xxxxxxxx' }

0

mongoose 的 populate 函数在抽象层面上相当于 mongodb 的 lookup,但是 populate 只创建对对象 id 的引用。如果你确保每个用户都有唯一的用户名,那么如果你想使用用户名填充数据,你可以使用 lookup,结果将是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接