所以我之前遇到过这个问题,但现在我真的想把它弄平而又不再遇到它。我有一个用户架构,接受其他用户作为朋友。
然而,不只是添加一个朋友'具有单个对象类型的User模式的关键字:Schema.Types.ObjectId,ref:" User" ,我想包括其他属性,如友谊状态等。检查下面的代码。
UserSchema = new Schema({
email: {
type: String,
unique: true
},
name: {
type: String,
min: [1, "Name must be at least 1 character in length"],
max: [18, "Name cannot exceed 18 characters in length"]
},
password: {
type: String,
min: [6, "Password must be at least 6 characters in length"],
max: [18, "Password cannot exceed 18 characters in length"]
},
friendships: [
{
friend: {
type: Schema.Types.ObjectId,
ref: "User"
},
myGain: {
type: Number,
default: 0
},
myDebt: {
type: Number,
default: 0
},
status: {
type: String,
default: "pending"
},
requestor: {
type: Number
}
}
]
});
正如您所看到的,友谊现在是一个数组,每个对象包含五个属性,第一个是“FRIEND'”。这是对User模型的实际引用,它将包含另一个用户。
我的问题是在做一些朋友的事情时开始让我感到困惑。
在我的控制器中,这就是我如何建立友谊。
const friendshipController = {
create: function(req, res) {
User.findByIdAndUpdate(req.params.id,
{ $push: { "friendships": {"friend": req.params.friendId } } }, {upsert: true}, function(err, user) {
if (err) {
console.log(err);
} else {
User.findByIdAndUpdate(req.params.friendId,
{ $push: { "friendships": {"friend": req.params.id } } }, {upsert: true}, function(err, user) {
if (err) {
console.log(err);
} else {
console.log("donezo");
}
}
)
}
} )
}
}
问题是当我查看mongo中的新记录时,它是以下内容:
password" : "password",
"bets" : [ ],
"friendships" : [
{
"friend" : ObjectId("581676fbfbbb9a43ac8c979d"),
"_id" : ObjectId("58168257a7c4cb4512b1cafb"),
"status" : "pending",
"myDebt" : 0,
"myGain" : 0
}
],
"__v" : 0
朋友下面的额外_id值是多少?那指的是什么?这是一个独特的价值,因为当我看到创建友谊的另一位朋友时,ObjectId值有点不同。 "朋友"的实际ObjectId值财产是我唯一想要的。这是正确的价值。该值(以979d结尾)引用另一位朋友。我只是不知道其他_id值是什么。
由于
答案 0 :(得分:1)
是的,Mongoose会为您正在创建的每个子文档分配一个ObjectID,除非您告诉它不要。正如你所说,它“实际上只是隐含地指定”它。它是分配给您保存的一个关系对象的唯一值。