我正在嘗試爲mongodb對象使用自定義_id。在mongodb中使用自定義_id,並鏈接到另一個對象
我有兩個對象:用戶&集團
用戶:
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();
直到這裏一切工作正常。現在我必須將該組鏈接到用戶。
用戶id => '蘇里亞' &的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));我不確定如何將用戶組添加到組。如何查詢特定組中的所有用戶?另外,這是否支持從用戶組字段填充組名?
謝謝。
This'in User'is wrong:'Groups:{type:[ObjectId],default:[]}'。您似乎嘗試一個「引用」模式。您在'Group'內定義了'_id'作爲「string」,因此您的「reference」列表需要是「相同類型」,並且表示爲「ref」,Groups:[{type:ObjectId,ref: '組'}]'。這實際上全部在[Mongoose Schemas](http://mongoosejs.com/docs/guide.html)中詳述。另外'default:[]'不起作用。在模式中定義數組元素時,如果您不提供元素,則會得到一個空數組。 –