【问题标题】:Mongoose: Collection not populating when used as a ref in another documentMongoose:在另一个文档中用作参考时不填充集合
【发布时间】:2013-07-01 08:11:53
【问题描述】:

一点背景知识:我正在使用 node.js 构建一个在线多人 Web 应用程序,有点类似于 Magic: The Gathering(但不是 M:TG 克隆)。所以我有了卡片和套牌的概念。如果我只有一个卡片模式,我可以很好地查询它。这是我的卡片架构:

var CardSchema = new Schema({
    cardName: { type: String, required: true, unique: true },
    cardType: { type: String, required: true }
    health: { type: Number },
    power: { type: Number }
});

module.exports = mongoose.model('Card', CardSchema);

然后在我的数据层中,我可以发出这样的查询并返回预期的结果:

Card.find().sort('cardName').exec(function (err, cardList) { ... });

但是,一旦我添加了一个名为 Deck 的新模式,其中包含对 Card 模式的引用:

var DeckSchema = new Schema({
    deckName: { type: String, required: true, unique: true },
    cards: [{ type: Schema.Types.ObjectId, ref: 'Card' }]
});

module.exports = mongoose.model('Deck', DeckSchema);

我之前获取所有卡片的查询没有返回任何结果:

Card.find().sort('cardName').exec(function (err, cardList) { ... });

我不确定我是否在人口方面遗漏了一些东西。我查看了关于人口的 Mongoose 文档,但我似乎无法弄清楚为什么添加这个新模式会导致我无法检索卡片。我确定这很简单,但我对 Mongoose 和 MongoDB 还很陌生,所以我确定我缺少一些简单的东西。

【问题讨论】:

  • 您的架构对我来说看起来不错。我怀疑这个问题与此完全无关。您甚至没有调用.populate('cards') 或查询Cards 集合。你确定你在这里吠叫的是正确的树吗?
  • 嗯,我有一个用于管理卡片的管理界面(基本上是 CRUD 操作)。如果我没有 Deck 架构,那么我可以成功查询卡片集合而不会出现问题。一旦我添加了 Deck 模式,那些之前工作的相同查询将不再返回数据。这很古怪。这是我的 github 存储库的链接,我可能没有包含足够的信息。 github.com/JamesMcConnell/arcana 模型在 /models 中,数据层代码在 /data

标签: node.js mongodb mongoose


【解决方案1】:

嗯,我发现了问题所在。有点像白痴的感觉,但就是这样。我在同一个文件中定义了 Card 和 Deck 模式,因为它们是相关的并且有意义。在文件的末尾,我有以下内容:

module.exports = mongoose.model('Card', CardSchema);
module.exports = mongoose.model('Deck', DeckSchema);

这意味着我的 Card 架构永远不会被公开,因为我在导出模型时没有考虑。我将 Deck 架构移到了一个单独的文件中,现在一切正常。

愚蠢的错误,但现在我知道了。知道是成功的一半。

【讨论】:

  • 谢谢,我也犯了同样的错误
猜你喜欢
  • 2015-12-10
  • 2019-05-26
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2015-10-10
  • 2015-05-21
相关资源
最近更新 更多