Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Expressjs Mongoose查找嵌套嵌入文档未定义_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Expressjs Mongoose查找嵌套嵌入文档未定义

Javascript Expressjs Mongoose查找嵌套嵌入文档未定义,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在用0.6.18、2.5.8和2.6.7构建一个游戏 我正在尝试使用mongoose存储和检索嵌入的文档。 考虑这个例子: 用户模式 字符模式 拼写模式 猫鼬 路线 控制台输出 看起来mongoose正确保存和检索了用户文档。但是,关联的嵌入文档未定义 我想确保我的文档已保存,因此我直接向mongodb询问: $ mongo mygame > db.users.find({username:'foo'}) { "username" : "foo", "_id" : Ob

我正在用0.6.18、2.5.8和2.6.7构建一个游戏

我正在尝试使用mongoose存储和检索嵌入的文档。 考虑这个例子:

用户模式

字符模式

拼写模式

猫鼬

路线

控制台输出

看起来mongoose正确保存和检索了用户文档。但是,关联的嵌入文档未定义

我想确保我的文档已保存,因此我直接向mongodb询问:

$ mongo mygame
> db.users.find({username:'foo'})
{
    "username" : "foo",
    "_id" : ObjectId("4fda2c77faa9aa5c68000003"),
    "created" : ISODate("2012-06-14T18:24:55.982Z"),
    "characters" : [
        {
            "name" : "bar",
            "_id" : ObjectId("4fda2c77faa9aa5c68000004"),
            "created" : ISODate("2012-06-14T18:24:55.986Z"),
            "spells" : [
                {
                    "name" : "fireball",
                    "_id" : ObjectId("4fda2c77faa9aa5c68000005"),
                    "created" : ISODate("2012-06-14T18:24:55.987Z")
                },
                {
                    "name" : "frozenball",
                    "_id" : ObjectId("4fda2c77faa9aa5c68000007"),
                    "created" : ISODate("2012-06-14T18:24:55.990Z")
                }
            ]
        }
    ]
}
如您所见,我的文档似乎正确地存储在mongodb中,但我无法检索嵌入mongoose的用户

我也尝试过不使用嵌套的嵌入式拼写文档,这会产生完全相同的问题

编辑

@帕特:你说得对。如果我以正确的顺序将所有模式直接放在同一个文件(例如主app.js)中,它就会工作

事实上,我希望尽可能地将每个模型保存在单独的文件中,因为它们会增长很多

例如,我的用户模型包含在一个名为models/User.js的文件中,应该可以使用上面提到的module.exports进行访问

但是,当我试图在另一个文件中将我的模型链接到mongoose时:mongoose.model'User',require./models/User';mongoose find方法返回未定义的嵌入文档


关于如何正确地将我的猫鼬模型保存在单独的文件中,你有什么想法吗?

我认为,用户模式需要在字符和拼写之后声明。

我认为,用户模式需要在字符和拼写之后声明。

用户模式文件应该首先要求在顶部声明CharacterSchema,然后把它传进来:

var CharacterSchema = require('./character');

var User = module.exports = new Schema({
      username: { type: String }
    , characters: [CharacterSchema]
    , created: { type: Date, default: Date.now }
});
同样,CharacterSchema文件应该首先在顶部需要SpellSchema,然后传递它:

var SpellSchema = require('./spell');
var CharacterSchema = module.exports = new Schema({ spells: [SpellSchema] })
这将维持他们的秩序


注意:子文档实际上不需要是模型,因为模型映射到集合,但只要您不直接在子文档上调用save,它们就不会保存到数据库中的单独集合。

用户架构文件应首先要求顶部有CharacterSchema,然后传入:

var CharacterSchema = require('./character');

var User = module.exports = new Schema({
      username: { type: String }
    , characters: [CharacterSchema]
    , created: { type: Date, default: Date.now }
});
同样,CharacterSchema文件应该首先在顶部需要SpellSchema,然后传递它:

var SpellSchema = require('./spell');
var CharacterSchema = module.exports = new Schema({ spells: [SpellSchema] })
这将维持他们的秩序


注意:子文档实际上不需要是模型,因为模型映射到集合,但只要您不在子文档上直接调用save,它们就不会保存到数据库中的单独集合。

谢谢您的回答,这很有帮助。但是我想把模型保存在单独的文件中,我已经编辑了我的问题。谢谢你的回答,这很有帮助。但是我想把模型保存在单独的文件中,我已经编辑了我的问题。谢谢。我的问题源于依赖性问题以及糟糕的文件结构。最后,我通过ObjectID加入了我的模型,而不是嵌入文档,这似乎更适合我的需要。谢谢。我的问题源于依赖性问题以及糟糕的文件结构。最后,我通过ObjectID加入了我的模型,而不是似乎更适合我需要的嵌入式文档。
null
[ { username: 'foo',
    _id: 4fda2c77faa9aa5c68000003,
    created: Thu, 14 Jun 2012 18:24:55 GMT,
    characters: [ undefined ] } ]
$ mongo mygame
> db.users.find({username:'foo'})
{
    "username" : "foo",
    "_id" : ObjectId("4fda2c77faa9aa5c68000003"),
    "created" : ISODate("2012-06-14T18:24:55.982Z"),
    "characters" : [
        {
            "name" : "bar",
            "_id" : ObjectId("4fda2c77faa9aa5c68000004"),
            "created" : ISODate("2012-06-14T18:24:55.986Z"),
            "spells" : [
                {
                    "name" : "fireball",
                    "_id" : ObjectId("4fda2c77faa9aa5c68000005"),
                    "created" : ISODate("2012-06-14T18:24:55.987Z")
                },
                {
                    "name" : "frozenball",
                    "_id" : ObjectId("4fda2c77faa9aa5c68000007"),
                    "created" : ISODate("2012-06-14T18:24:55.990Z")
                }
            ]
        }
    ]
}
var CharacterSchema = require('./character');

var User = module.exports = new Schema({
      username: { type: String }
    , characters: [CharacterSchema]
    , created: { type: Date, default: Date.now }
});
var SpellSchema = require('./spell');
var CharacterSchema = module.exports = new Schema({ spells: [SpellSchema] })