Использование паспорта с nodejs и mongo/mongoose.
Я храню записи посещаемости в коллекции, которые используют req.user.id в качестве поиска, чтобы связать записи посещаемости с зарегистрированным пользователем. Ключевое поле называется "userId".
При попытке соединения я узнал, что _id в коллекции пользователей не имеет строку типа. Я пытался немного обойти это. Мое последнее - попытаться сохранить записи посещаемости после преобразования req.user.id в ObjectId(). Тем не менее, не повезло. Похоже, что userId по-прежнему сохраняется как строка. Как я могу заставить этот Join работать?
router.post('/', ensureAuthenticated, function(req, res){
var query = { userId: req.user.id };
var update = {
userId: new ObjectId(req.user.id), // This is where I need to save
response: req.body.inOrOut,
notes: req.body.notes
};
// Upsert
var options = { upsert: true };
// Use mongoose to save via upsert.
RSVP.findOneAndUpdate( query, update, options, function( err, doc ) {
if ( err ) throw err;
});
Вот соединение:
RSVP.aggregate([{
$lookup: {
from: "users", // collection name in db
localField: "userId",
foreignField: "_id",
as: "user"
}
}
]).exec( (err, rsvpList) => {
if (err) throw err;
console.log(rsvpList);
});
РЕДАКТИРОВАТЬ:
Я только что понял, что моя схема mongoose для rsvps все еще была userId как строка. Я изменил его следующим образом:
let mongoose = require('mongoose');
//let ObjectId = require('mongodb').ObjectId;
// RSVP Schema
var RSVPSchema = mongoose.Schema({
userId: {
//type: String,
type: mongoose.Schema.Types.ObjectId,
index:true
},
response: {
type: String
},
notes: {
type: String
},
});
var RSVP = module.exports = mongoose.model('RSVP', RSVPSchema);
Моя консоль.log:
console.log('rsvp: ' + rsvpList[0].user.toString());
Он показывает [Объект объекта]. Я не могу сказать, работает ли мое соединение. Как я могу проверить rsvpList [0].user, чтобы узнать, содержит ли он подключенного пользователя?
Я был близко. Это должно было быть:
console.log('rsvp: ' + rsvpList[0].user[0].name);
console.log()
не «глубоко сериализует» объекты. ИспользуйтеJSON.stringify
как показано в связанном ответе