Результат поиска $ показывает [объект объекта]

1

Использование паспорта с 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, чтобы узнать, содержит ли он подключенного пользователя?

1 ответ

0

Я был близко. Это должно было быть:

console.log('rsvp: ' + rsvpList[0].user[0].name);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню