mon goose: ObjectId, возвращаемый с помощью findOne, не определен - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь сохранить документ книги, который ссылается на документ художника. Однако я не могу получить objectId из документа художника. Когда я пытаюсь получить _id из документа исполнителя, мне возвращается undefined. Однако, если я регистрирую весь документ художника, я вижу, что _id является частью документа как _id: ObjectID { _bsontype: 'ObjectID', id: [Buffer [Uint8Array]] }.

Как мне получить ObjectId из документа художников и сохранить документ книги, чтобы он ссылался на документ художника?

const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;

var artistSchema = new Schema({
    name: { type: String, required: true },
    description: { type: String, default: null },
});
const Artist = mongoose.model('Artist', artistSchema);

var bookSchema = new Schema({
    name: { type: String, required: true },
    artist: { type: ObjectId, ref: 'Artist' },
});
const Book = mongoose.model('Book', bookSchema);

// ...

let artistId = await Artist.findOne({ name: 'John Smith'})._id;
console.log(artistId); // prints: undefined

let book = new Book({
    name: 'Book Name',
    artist: artistId,
});

1 Ответ

0 голосов
/ 03 августа 2020

Вы должны дождаться вызова asyn c, а не доступа к _id. Измените

let artistId = await Artist.findOne({ name: 'John Smith'})._id;

на

let artistId = (await Artist.findOne({ name: 'John Smith'}))._id;

, и он должен работать.

Например:

function getId() {
    return new Promise((resolve) => {
        setTimeout(() => resolve({_id: 1}), 1000);
    });
}

async function run() {
    let id = await getId()._id;
    console.log(id);
    let id2 = (await getId())._id;
    console.log(id2);
}

run();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...