在mongodb中使用自定义_id,并链接到另一个对象

时间:2017-10-28 21:07:40

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

我正在尝试为mongodb对象使用自定义_id。

我有两个对象:User&组

用户:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const ObjectId = Schema.Types.ObjectId;

const userSchema = new Schema(
    {
        //Username
        _id: {
            type: String,
            unique: true
        },

        name: {
            type: String,
            required: 'Name is required.'
        },

        //Groups [ group-unique-url ]
        Groups: {
            type: [ObjectId],
            default: []
        }
    },
    { _id: false }
);

mongoose.model('users', userSchema);

组:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const groupSchema = new Schema(
    {
        //unique URL
        _id: {
            type: String,
            unique: true
        },

        //Name of the Group
        name: {
            type: String,
            unique: true,
            required: true
        }
    },
    { _id: false }
);

mongoose.model('groups', groupSchema);

保存用户:

const user = new User({
    name: 'Surya Chandra',
    _id: 'surya'
});
user.save();

保存组:

const group = new Group({
    name: 'StackOverflow',
    _id: 'stack.com' //unique
});
group.save();

直到这里一切正常。现在我要将组链接到用户。

userId => 'surya'& groupId => 'stack.com'

const user = await User.findById(userId); //'surya'

if (user.Groups.indexOf(groupId) >= 0) {
} else {
    user.Groups.push(groupId); //user.G.push(mongoose.Types.ObjectId(_g));
    user.save();
}

user.Groups.push(的groupId)

CastError: Cast to ObjectId failed for value "stack.com" at path "Groups"

user.Groups.push(mongoose.Types.ObjectId(_g));

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

我不确定如何将群组添加到用户组。如何查询特定组中的所有用户?此外,这是否支持从“用户组”字段填充“组名”?

感谢。

1 个答案:

答案 0 :(得分:1)

在你的userSchema中,你应该这样做

mongoose.model('groups', groupSchema);

ref:'群组'必须与您在组模型中定义的型号名称相匹配

{{1}}

要稍后找到该群组,您可以使用填充('群组')。阅读mongoose文档了解更多详情 我也不明白为什么要覆盖猫鼬的_id。我认为它不会起作用。如果您想使字段唯一,您可以尝试其他名称。