我正在使用ObjectId在MongoDB中的2个集合之间形成关系,见下文:
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,但是据我了解,这不适用于对象。
答案 0 :(得分:0)
$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")
]
}