Так что я столкнулся с этой проблемой раньше, но теперь я действительно хочу сгладить ее и не столкнуться с ней снова. У меня есть пользовательская схема, которая принимает других пользователей в качестве друзей.Mongoose - Что это за добавленная собственность _id добавляется в мою собственность дружбы?
Однако вместо того, чтобы просто добавить ключ «друзей» к схеме пользователя с одним объектом типа: Schema.Types.ObjectId, ref: «Пользователь», я хочу включить другие свойства, такие как статус дружбы и т. Д. Проверьте код ниже.
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
}
}
]
});
Как вы можете видеть, дружба теперь массив, с каждым объектом, содержащим пять свойств, первый из которых «ДРУГ». Это фактическая ссылка на модель пользователя, которая будет содержать другого пользователя.
Моя проблема в том, что это начинает путать меня, когда делаешь что-то вроде добавления друга.
В моем контроллере, вот как я создаю дружбу.
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");
}
}
)
}
})
}
}
Проблема заключается в том, когда я смотрю на новые записи в Монго, это следующее:
password" : "password",
"bets" : [ ],
"friendships" : [
{
"friend" : ObjectId("581676fbfbbb9a43ac8c979d"),
"_id" : ObjectId("58168257a7c4cb4512b1cafb"),
"status" : "pending",
"myDebt" : 0,
"myGain" : 0
}
],
"__v" : 0
Что такое, что дополнительное значение _id под другом? Что это значит? Это уникальная ценность в том, что, когда я смотрю на другого друга, у которого была создана дружба, значение ObjectId немного отличается. Фактическое значение ObjectId свойства «friend» - это единственное, что я хочу. Это правильное значение. Это значение (заканчивающееся на 979d) ссылается на другого друга. Я просто не понимаю, что это за другое значение _id.
Благодаря
Возможный дубликат [Остановить Mongoose от создания свойства \ _id для элементов массива субдокументов] (http://stackoverflow.com/questions/17254008/stop-mongoose-from-creating-id-property-for-sub- document-array-items) –
Спасибо за этот ресурс ссылки. Я просмотрел его, и это не дубликат этого вопроса. Аналогично и имеет отношение к схемам и _id, но не к дублированию. Хороший ресурс, хотя. Мой вопрос в том, что это такое _ID? Мангуста буквально просто неявно назначил это знаком дружбы? Поскольку это было бы очень полезно для меня, если мне нужно изменить статус дружбы из моего интерфейса, я могу просто передать это _id и обновить определенную дружбу. Должно сделать запрос на все мои дружеские отношения проще, т. Е. FindAndUpdateOne где _id = .. вы получите эту идею. Это что такое _id? – user7024499
Я думаю, что вы можете сделать findOne ({"frendships._id": [ObjectId]}) 'для всех объектов в массиве. Идентификатор автоматически присваивается при нажатии на массив. Это обычная вещь –