Я устанавливаю бэкэнд для mongoose и GraphQL, и у меня возникают некоторые проблемы с виртуальным заполнением в mongoose.
Это приложение node.js, работающее на версии 5.4.0 mongoose и версии 11.5.0 узла. Я безуспешно пытался следовать этим двум инструкциям
http://thecodebarbarian.com/mongoose-virtual-populate
https://thecodebarbarian.com/mongoose-4.13-virtual-populate-dynamic-refs-fields
const gameStatusSchema = new mongoose.Schema({
userID: String,
gameID: { type: mongoose.Schema.Types.ObjectId, ref: "Game"},
gameStatus: Number
}, {
timestamps: true,
toObject: { virtuals: true },
toJSON: { virtuals: true }
});
const gameSchema = new mongoose.Schema({
gameTitle: String,
gameDescription: String,
gameType: Number,
gameTypeID: String,
gamePosition: Number,
}, {
timestamps: true,
toObject: { virtuals: true },
toJSON: { virtuals: true }
});
gameSchema.virtual("gameStatus", {
ref: "GameStatus",
localField: "_id",
foreignField: "gameID",
justOne: true
});
const newGame = await Game.findById(id)
.populate("gameStatus");
console.log(newGame);
Объект newGame даже не содержит свойства gameStatus. Если я добавлю .toJSON({virtuals: true})
, gameStatus отобразится как ноль.
Ниже приведены примеры объектов JSON из Монго
gameStatus object
{
"_id" : ObjectId("5c473a872721eb7327377fa2"),
"userID" : "5c3629deed4593ab3b435614",
"gameID" : ObjectId("5c472bc4b6b5f745bbbd7f6a"),
"gameStatus" : 8
}
game Object
{
"_id" : ObjectId("5c472bc4b6b5f745bbbd7f6a"),
"gameTitle" : "Lotto",
"gameDescription" : "Test",
"gameType" : 1,
"gameTypeID" : "5c472bc4b6b5f745bbbd7f69",
"gamePosition" : 8,
"course" : ObjectId("5c35e5e53757a7a29c33565f"),
"createdAt" : ISODate("2019-01-22T14:42:12.267Z"),
"updatedAt" : ISODate("2019-01-22T14:42:12.267Z"),
"__v" : 0
}
Я ожидаю, что приведенный выше код позволит мне запросить мой игровой объект и получить игровой объект с виртуально заполненным объектом gameStatus, но он возвращает ноль. Было бы приятно, если бы кто-нибудь взглянул на мою проблему.