猫鼬对象关系

Posted

技术标签:

【中文标题】猫鼬对象关系【英文标题】:mongoose object relationship 【发布时间】:2015-11-25 00:52:58 【问题描述】:

我正在尝试创建一个新的访问令牌对象。在调试器中,我可以看到正确返回了 user._id 值。但是当分配给令牌用户字段时,token.user._id 的值是未定义的,并且 token.user.id 是一些垃圾值。即使在保存令牌后也会观察到相同的行为。

exports.create = function(user, client, deviceId, done) 
    if (!user) return done(new Error('Failed to create client without user'));
    var token = new AccessToken(
        user: user._id,
        client: client._id,
        deviceId: deviceId
    );
    token.save(function(err) 
        if (err) return done(err);
        return done(null, token);
    );
;

【问题讨论】:

【参考方案1】:

var token = new AccessToken(
    user: user._id,
    client: client._id,
    deviceId: deviceId
);

您将用户的 ID 分配给 user,以便您可以将其与 token.user 一起使用。 如果您想使用token.user._id 访问您的用户ID,您应该这样做:

var token = new AccessToken(
    user: user,
    client: client._id,
    deviceId: deviceId
);

但您在查询访问token.user._id时必须使用.populate('user')

【讨论】:

【参考方案2】:

在猫鼬中,您使用.id 以字符串形式访问._id 字段。 What is the difference between id and _id in mongoose?

【讨论】:

是的。但我的意图是在这里使用 _id 作为对象引用,而不是作为字符串。

以上是关于猫鼬对象关系的主要内容,如果未能解决你的问题,请参考以下文章

如何使用父引用填充猫鼬中的一对多关系?

带有嵌套可选对象和必填字段的猫鼬模式

nodejs中的异步foreach和mongoose

猫鼬填充返回空数组

猫鼬与 NestJS - 一对多

如何在两个集合之间建立关系?