Javascript Mongoose虚拟填充返回null

Javascript Mongoose虚拟填充返回null,javascript,mongoose,graphql,Javascript,Mongoose,Graphql,我正在mongoose和GraphQL上设置后端,我在mongoose中的虚拟填充方面遇到了一些问题 这是一个node.js应用程序,运行在mongoose的5.4.0版和node的11.5.0版上。我试图遵循这两个指南,但都没有成功 newGame对象甚至不包含gameStatus属性。如果我添加.toJSON({virtuals:true})gameStatus显示为null 下面是来自mongo的JSON对象的示例 gameStatus object { "_id" : Obj

我正在mongoose和GraphQL上设置后端,我在mongoose中的虚拟填充方面遇到了一些问题

这是一个node.js应用程序,运行在mongoose的5.4.0版和node的11.5.0版上。我试图遵循这两个指南,但都没有成功

newGame对象甚至不包含gameStatus属性。如果我添加
.toJSON({virtuals:true})
gameStatus显示为null

下面是来自mongo的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对象的游戏对象,但它返回null。如果有人能看看我的问题,我会很高兴的。

收藏命名时出现了问题。猫鼬通常在集合名称中添加“es”,如复数形式。我在mongoose
mongoose.set(“debug”,true)中启用调试后发现了这一点并看到它正在寻找错误的集合。在此实例中,集合名称缺少“es”

这个堆栈溢出线程解释了一点


我通过向我的mongoose模式选项中添加
集合:“gameStatus”
解决了这个问题。

默认情况下,虚拟字段不处于活动状态。
您应该将它们设置为活动字段。像这样

user.set('toObject', { virtuals: true });    // add this
user.set('toJSON', { virtuals: true });      // add this
或者,如果需要的话

user.set('toObject', { virtuals: true });    // add this
user.set('toJSON', { virtuals: true });      // add this
user.plugin(mongooseLeanVirtuals);           // add this

你能告诉我你在哪里创建模型吗?你是如何创造它的?我不确定我是否理解你的问题@MuhammadFaizan。它们在单独的文件中创建。导入猫鼬,并导出模型。包含模型的文件夹有一个index.ts文件,其中所有模型都作为模块导出<代码>const Game=mongoose.model(“游戏”,gameSchema);出口违约博弈我认为这不相关,但您应该在时间戳旁边的选项中添加toJSON&toObject:true@BenSower对我请求以下ID,它在上面的两个对象中都表示:5C472BC4B6B5F745BBD7F6A。我还尝试将toJSON和toObject移到包含时间戳的花括号中,但没有任何区别。你能看看这个独立的要点,看看它是否适合你吗?它使用mongoose 5.4.2和mongodb 3.6.3
user.set('toObject', { virtuals: true });    // add this
user.set('toJSON', { virtuals: true });      // add this
user.plugin(mongooseLeanVirtuals);           // add this