Mongoose populate игнорируется для этой базовой настройки

У меня есть схема пользователя, в которой есть несколько заметок, и заметка, которая принадлежит userId

const UserSchema = new Schema({
    _id: Schema.Types.ObjectId,
    email: {type: String, required: true, trim: true, lowercase: true, unique: true},
    notes: [{type: Schema.Types.ObjectId, ref: 'Note'}]
});

const NoteSchema = new Schema({
    userId: {type: mongoose.Types.ObjectId, ref: 'User'},
    content: {type: String, required: true, trim: true, lowercase: true},
});

Я пытаюсь заполнить своего пользователя заметками, используя следующий синтаксис (из документации)

const user = await User.findById(mongoose.Types.ObjectId("5bd2a8c4963ac00f57a18074"))
    .populate('notes')
    .exec(function (err, result) {
        console.log(result);
    });

Но он возвращает пользователя без данных Notes. Есть идеи, что я делаю неправильно?

не могли бы вы поделиться образцами документов, которые у вас есть?

IftekharDani 26.10.2018 08:36

Я не вижу проблем в схеме, убедитесь, что у вас есть соответствующие данные в примечаниях.

Shivam Pandey 26.10.2018 09:42
0
2
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

NoteSchema вот в чем проблема:

userId: {type: mongoose.Types.ObjectId, ref: 'User'}

Используйте ниже,

userId: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}
// OR
userId: {type: Schema.Types.ObjectId, ref: 'User'}
// OR
userId: {type: Schema.ObjectId, ref: 'User'} // For backword compatibility

Примечание:- Схема всегда должна использовать mongoose.Schema.Types. А mongoose.Types.ObjectId можно использовать с реализацией мангуста.

Я могу правильно получить документ (Ниже кода):

var mongoose = require('mongoose'),
Schema = mongoose.Schema;


const NoteSchema = new Schema({
    userId: {type: Schema.Types.ObjectId, ref: 'UserTest'},
    content: {type: String, required: true, trim: true, lowercase: true},
});

const UserSchema = new Schema({
  _id: Schema.Types.ObjectId,
  email: {type: String, required: true, trim: true, lowercase: true, unique: true},
  notes: [{type: Schema.Types.ObjectId, ref: 'NoteTest'}]
});

var Note = mongoose.model('NoteTest', NoteSchema);
var User = mongoose.model('UserTest', UserSchema);


User.find({_id : mongoose.Types.ObjectId("5bd2c84dd79cc5d8b1c62964")})
  .populate('notes')
  .exec(function (err, result) {
      console.log("result.....", JSON.stringify(result));
  });

Выход:

[
  {
    "_id": "5bd2c84dd79cc5d8b1c62964",
    "email": "hardik@com.com",
    "notes": [
      {
        "_id": "5bd2c869d79cc5d8b1c62965",
        "content": "ABC",
        "userId": "5bd2c84dd79cc5d8b1c62964"
      },
      {
        "_id": "5bd2c88ad79cc5d8b1c62966",
        "content": "DEF",
        "userId": "5bd2c84dd79cc5d8b1c62964"
      }
    ]
  }
]

Другие вопросы по теме