从MongoDB获取所有文档而不是所有模型

时间:2013-02-17 22:32:23

标签: node.js mongodb mongoose

我正在使用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,我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

然后你查询那个集合,你似乎很惊讶所有东西都存储在同一个集合中。这让我觉得好像你对Mongoose / MongoDB没什么经验,所以我建议你下载并学会爱MongoVUE。这个应用程序是一个很好的GUI,可以看到MongoDB数据库的内容。在开发时,您可能还想启用调试,以便查看mongoose正在向服务器启动的查询(mongoose.set('debug',true))。