Я использую связь между двумя коллекциями, и у меня есть схема коллекции, как показано ниже.
// Room database Entry.
{
"_id" : ObjectId("59b77082f7da4b1b3f64d927"),
"room_id" : "c3wqqkfndg9cnmi",
"room_name" : "bcmvnxbcnvsjkfhkjdh",
"users" : [
{
"_id" : ObjectId("59b77082f7da4b1b3f64d926")
}
],
"__v" : 0
}
//User Database Entry, Related with above Room entry.
{
"_id" : ObjectId("59b77082f7da4b1b3f64d926"),
"user_id" : "dyr1qlrtso47vi",
"__v" : 0
}
Когда я передаю запрос для поиска комнаты и заполняю данные, я нашел следующий результат.
// Query For Room find and Populate.
room
.findOne({ room_id: result.data.room_id })
.populate("users._id")
.exec(function(err, data){
});
//Result As Follow
{
"_id":"59b77082f7da4b1b3f64d927",
"room_id":"c3wqqkfndg9cnmi",
"room_name":"bcmvnxbcnvsjkfhkjdh",
"__v":0,
"users":[
{
"_id":{
"_id":"59b77082f7da4b1b3f64d926",
"user_id":"dyr1qlrtso47vi",
"__v":0
}
}
]
}
Мое требование похоже на то, что я не хочу _id
в качестве ключа объекта. Мне нужен объект users
, как показано ниже.
"users":[
{
"_id":{
"_id":"59b77082f7da4b1b3f64d926",
"user_id":"dyr1qlrtso47vi",
"__v":0
}
}
]
Should be
"users":[
{
"_id":"59b77082f7da4b1b3f64d926",
"user_id":"dyr1qlrtso47vi",
"__v":0
}
]
$lookup
там, где это возможно, а также понимать, почему вы должны использовать его вместо этого. Население - это далеко не одно и то же. Хотя вы можете изменить структуру документа после возврата, настоящая проблема здесь в том, что ваша структура изначально была неправильной. Данные комнаты должны иметь массивusers
как"users" : [ObjectId("59b77082f7da4b1b3f64d926")]
. И для этого схема должна быть"users": [{ type: Schema.Types.ObjectId, ref: 'User' }]
. Внутренний_id
- ошибка - person Neil Lunn   schedule 12.09.2017