我正在使用objectids在mongodb中的两个集合之间形成关系,请参见下文:
const userSchema = new Schema({
username: { type: String, unique: false, required: false },
password: { type: String, unique: false, required: false },
concerts:[
{
type: Schema.Types.ObjectId,
ref: "Concert", unique: true, required: false
}
]
})
const concertSchema = new Schema({
userId: {type: String, unique: false, required: false},
concertId: { type: Number, unique: false, required: false },
artist: { type: String, unique: false, required: false },
venue: { type: String, unique: false, required: false },
date: { type: Date, unique: false, required: false },
time: { type: String, unique: false, required: false },
city: { type: String, unique: false, required: false },
latitude: { type: Number, unique: false, required: false },
longitude: { type: Number, unique: false, required: false },
attendees: [
{
type: Schema.Types.ObjectId,
ref: "User", unique: true, required: false
}
]
})
但是,我在数据库中遇到了重复objectid的问题,下面是代码段,我将ObjectID添加到数据库中:
then(show => {
return db.User.findOneAndUpdate(
{
"_id": req.body.userId
}, {
$push: {concerts: show._id}
}, {
new: true
}
).then(res.json(show))
})
}
else {
return db.User.findOneAndUpdate(
{
"_id": req.body.userId
}, {
$push: {concerts: concert._id}
}, {
new: true
})
.then(res.json(concert))
}
})
我尝试过$ addtoset,但我的理解是,这与对象不起作用。
$addToSet
与对象不起作用,但它可以与ObjectIds
一起使用(因为它们本质上只是特殊字符串)
> db.test_coll.insert({})
WriteResult({ "nInserted" : 1 })
> db.test_coll.findOneAndUpdate({}, {$addToSet: {ids: ObjectId("5c6b6714f5b3e45884d12630") }}, {returnNewDocument: true});
{
"_id" : ObjectId("5c6b69a6f5b3e45884d12632"),
"ids" : [
ObjectId("5c6b6714f5b3e45884d12630")
]
}
> db.test_coll.findOneAndUpdate({}, {$addToSet: {ids: ObjectId("5c6b6714f5b3e45884d12630") }}, {returnNewDocument: true});
{
"_id" : ObjectId("5c6b69a6f5b3e45884d12632"),
"ids" : [
ObjectId("5c6b6714f5b3e45884d12630")
]
}
> db.test_coll.findOneAndUpdate({}, {$addToSet: {ids: ObjectId("5c6b6714f5b3e45884d12630") }}, {returnNewDocument: true});
{
"_id" : ObjectId("5c6b69a6f5b3e45884d12632"),
"ids" : [
ObjectId("5c6b6714f5b3e45884d12630")
]
}