我正在使用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,我做错了什么?
答案 0 :(得分:1)
您显示的模型似乎是项目模型,但您正在使用“字符”名称创建模型。这意味着您告诉Mongoose有关项目的方案,并将其存储在“character”集合中。假设你已经为每个其他模型(角色/玩家)做了同样的事情,那么你一直都是Mongoose,所有东西都在同一个集合中。
然后你查询那个集合,你似乎很惊讶所有东西都存储在同一个集合中。这让我觉得好像你对Mongoose / MongoDB没什么经验,所以我建议你下载并学会爱MongoVUE。这个应用程序是一个很好的GUI,可以看到MongoDB数据库的内容。在开发时,您可能还想启用调试,以便查看mongoose正在向服务器启动的查询(mongoose.set('debug',true))。