2016-10-30 2 views
0

Так что я столкнулся с этой проблемой раньше, но теперь я действительно хочу сгладить ее и не столкнуться с ней снова. У меня есть пользовательская схема, которая принимает других пользователей в качестве друзей.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.

Благодаря

+1

Возможный дубликат [Остановить Mongoose от создания свойства \ _id для элементов массива субдокументов] (http://stackoverflow.com/questions/17254008/stop-mongoose-from-creating-id-property-for-sub- document-array-items) –

+0

Спасибо за этот ресурс ссылки. Я просмотрел его, и это не дубликат этого вопроса. Аналогично и имеет отношение к схемам и _id, но не к дублированию. Хороший ресурс, хотя. Мой вопрос в том, что это такое _ID? Мангуста буквально просто неявно назначил это знаком дружбы? Поскольку это было бы очень полезно для меня, если мне нужно изменить статус дружбы из моего интерфейса, я могу просто передать это _id и обновить определенную дружбу. Должно сделать запрос на все мои дружеские отношения проще, т. Е. FindAndUpdateOne где _id = .. вы получите эту идею. Это что такое _id? – user7024499

+0

Я думаю, что вы можете сделать findOne ({"frendships._id": [ObjectId]}) 'для всех объектов в массиве. Идентификатор автоматически присваивается при нажатии на массив. Это обычная вещь –

ответ

1

Да, Mongoose присваивает ObjectID каждого поддокумент вы создаете, если вы не скажете ему этого не делать. Как вы говорите, это «буквально просто неявно назначает» это. Это уникальное значение, присвоенное этому одному объекту отношений, который вы сохранили.

Смежные вопросы