Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
Arrays node.js:JSON点表示法+;访问数组密钥_Arrays_Node.js_Mongodb_Mongoose_Syntax - Fatal编程技术网

Arrays node.js:JSON点表示法+;访问数组密钥

Arrays node.js:JSON点表示法+;访问数组密钥,arrays,node.js,mongodb,mongoose,syntax,Arrays,Node.js,Mongodb,Mongoose,Syntax,我有一个使用node.js、express、mongoDB和mongoose的站点设置。Mongoose给了我一个包含以下内容的数组: [ { title: 'HTML in depth', author: 'kevin vanhove', _id: 53039f264a6324978c70084b, chapters: [ { _id: 53039f264a6324978c70084d, content: '/jow',

我有一个使用node.js、express、mongoDB和mongoose的站点设置。Mongoose给了我一个包含以下内容的数组:

[ { title: 'HTML in depth',
    author: 'kevin vanhove',
    _id: 53039f264a6324978c70084b,
    chapters: 
     [ { _id: 53039f264a6324978c70084d,
         content: '/jow',
         title: 'History of HTML' },
       { _id: 53039f264a6324978c70084c,
         content: '/w3c',
         title: 'What is the W3C' } ],
    __v: 0 } ]
我在终端中使用以下代码获得此结果:

function indexData(books){

console.log(books)

res.render("index.html", {context:books, partials:{footer:"footer", header:"header"}})
}

现在,我正在尝试访问章节[0]中的值。标题,但出现错误:

console.log(books[0].chapters[0].title)

TypeError: Cannot read property '0' of undefined
我在这里很困惑,我是否使用正确的点符号来访问值

更新1:完成终端输出

24 Feb 10:56:47 - [nodemon] restarting due to changes...
24 Feb 10:56:47 - [nodemon] starting `node app.js`
Mongoose: books.find({}) { fields: undefined }  

/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/routes/routes.js:45
        console.log(books[0].chapters[0].title)
                                     ^
TypeError: Cannot read property '0' of undefined
    at indexData (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/routes/routes.js:45:32)
    at Promise.<anonymous> (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/routes/routes.js:37:31)
    at Promise.<anonymous> (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
    at Promise.EventEmitter.emit (events.js:95:17)
    at Promise.emit (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.fulfill (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
    at /Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/lib/query.js:1052:26
    at model.Document.init (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/lib/document.js:250:11)
    at completeMany (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/lib/query.js:1050:12)
    at Object.cb (/Users/kevinvanhove/Documents/work/projects/basing/business/klanten/javascript/nodeJS/express/basing/node_modules/mongoose/lib/query.js:1017:11)
24 Feb 10:56:49 - [nodemon] app crashed - waiting for file changes before starting...

这在Mongoose(服务器)端不起作用。
find()
的结果是一个光标,您需要从本机驱动程序部分通过toArray进行迭代或转换。像这样的

(假设模式
书籍
):

当然,如果您已经为数组及其不是的文档定义了额外的模式,那么这将带来更大的伤害,您需要使用迭代方法来获得作为数组的结果


如果您希望从
书籍中获得特定的项以及其中的子项,那么最好使用调整find查询,而不是返回所有结果。或者甚至可能会有所帮助。

您确定向我们展示了正确的控制台输出吗?复制粘贴JSON文档并访问
书籍[0]。章节[0]。标题
。您好,是。。。我更新了我的帖子,其中包含了完整的输出。看起来有时候MongoDB找不到您要查找的文档,因此返回了一个空对象。您应该检查callback.thx的
err
参数,如果我检查errAs a side note的值,我会得到'null',如果我尝试此操作,那么我确实会得到值:console.dir(books[0].title)thx对于您的答案,我仍然需要检查它,但是如果我需要进行转换,那么这个方法会起作用吗?console.log(书籍[0].title//为我提供了HTML格式depth@kevinius你说的是在你的浏览器客户端中检查它,对吗?如果你将所有结果返回到客户端,那么你可以这样检查。但是你在服务器端以不同的方式对待它。这就是答案中告诉你的。我理解我必须在服务器端以不同的方式对待它。但是t输出到console.log是“服务器端”?因此我可以访问书籍[0]。服务器端和客户端的标题,但我无法访问数组中更深的值(如书籍[0]。章节[0]。标题。我现在非常困惑……抱歉……是否会是这样,因为子文档(章节)没有mongoose架构?我只设置了这个架构:var bookschema=new mongoose.schema({title:String,author:String})@kevinius事实上,它不是一个数组,当然也不是我提到的本地形式,但很可能有一个猫鼬助手使事物在该级别上显示为数组。你可以使用我提出的方法,或者将其移动到聊天室?你的问题已经得到了回答,可以解释为什么你会这样做我们试着去做是行不通的,那么你可以用同样的方式去做。还有一个指向你可能应该做的事情的指针。如果你仍然在理解这个问题上有困难,那么也许需要另外一个问题。
var booksSchema = new mongoose.Schema({
 title: String,
 author: String,
 chapters: [
    {
        title: String,
        content: String
    }
 ]

});
Books.collection.find({}).toArray(function(err, results) {

  // results is an array that you can do something with here.

});