【问题标题】:Getting all documents from MongoDB instead of all Models从 MongoDB 获取所有文档而不是所有模型
【发布时间】:2013-02-18 08:11:23
【问题描述】:

我正在使用 Mongoose 从我的 Node 应用程序调用 MongoDB,如下所示:

var query = itemModel.find();
query.exec(function (err, items) {
  console.log(err);
  socket.emit("items", items); 
});

我有 3 个这样定义的模型:

var Schema = mongoose.Schema
  , ObjectId = Schema.ObjectId;
var playerModel = require('./models/player.js').make(Schema, mongoose);
var characterModel = require('./models/character.js').make(Schema, mongoose, ObjectId);
var itemModel = require('./models/item.js').make(Schema, mongoose);

我的模型如下所示:

function make(Schema, mongoose) {
    itemSchema = new Schema({
        name: String
      , bonus: [{ 
            type: String
          , value: Number 
        }]
      , price: Number
      , slot: String
    });
    return mongoose.model('Character', characterSchema);
}
exports.make = make;

出于某种原因,我得到了所有文件,无论它们是物品、角色还是玩家。由于我在 itemModel 上调用 find(),所以我只期待 Items,我做错了什么?

【问题讨论】:

  • 您的“我的模型看起来像”代码看起来不正确。您正在创建itemSchema,然后在mongoose.model 调用中引用characterSchema。这只是一个错字吗?

标签: node.js mongodb mongoose


【解决方案1】:

您显示的模型似乎是项目模型,但您正在使用“角色”名称创建模型。这意味着您告诉 Mongoose 项目的方案,并且它存储在“角色”集合中。假设您对其他模型(角色/玩家)都做了同样的事情,那么您就是 Mongoose,所有东西都在同一个集合中。

然后您查询该集合,您似乎很惊讶所有内容都存储在同一个集合中。我觉得你好像对 Mongoose/MongoDB 没有什么经验,所以我建议你下载并学习爱上 MongoVUE。这个应用程序是一个很好的 GUI,可以用来查看 MongoDB 数据库底层发生的事情。在开发过程中,您可能还希望启用调试功能,以便查看 mongoose 向服务器发起的查询 (mongoose.set('debug', true))。

【讨论】:

  • 啊。复制/粘贴的厄运。几个小时一直在敲我的头。感谢并为 mongoVUC +1,这将很有帮助
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多