ForEach 不能在 mongodb 上工作,但在本地数组声明中工作正常

Posted

技术标签:

【中文标题】ForEach 不能在 mongodb 上工作,但在本地数组声明中工作正常【英文标题】:ForEach not working on mongodb but it work fine in locally array declaration 【发布时间】:2019-01-05 19:05:51 【问题描述】:

error of the code

我的 forEach 循环在尝试从数据库 (mongodb) 获取数据时无法在 ejs 文件中工作,它包含一个名为 campground 的集合。但是当我将对象集合存储在 myapp.js 代码中的数组中时,它可以正常工作。但是当我尝试通过在数据库中存储数据来实现时,它会显示错误 campground.forEach is not a function

这是我的代码:

myapp.js

var express=require("express");
var app=express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded(extended:true));
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/campit");
var campgroundSchema=new mongoose.Schema(
  name:String,
  image:String
);

var campground=mongoose.model("campground",campgroundSchema);
app.get("/create",function(req,res)
   campground.find(,function(err,campgrounnd)
      if(err)
        console.log(err);
      
      else
        res.render("index.ejs",campground:campground);
      
    )
 );
app.listen("3000",function()
  console.log("listening from server 3000"); 
);

index.ejs 文件,它应该被渲染并且它包含那个 for.Each 循环

  <div class="container">
  <div class="row no-gutters">
    <% campground.forEach(function(camp) %>
      <div class="col col-lg-4 img-thumbnail">
        <img class="but"   src="<%=camp.image%>" >
        <div class="text-center">
          <h6><%= camp.name %> </h6>
          <button class="btn btn-outline-info " type="button" name="more info"> more info</button>
        </div>
      </div>
    <% ); %>
  </div>
</div>

任何帮助都将受到高度评价..谢谢 console.log the campground

【问题讨论】:

您能否添加您遇到的错误 请看问题的开头 将这一行 console.log(campground) 放在 res.render("index.ejs",campground:campground); 之前,看看打印了什么。 它显示了很多我不知道从哪里来的 json 数据,我应该发布它的图像吗?? 请张贴我认为您在 campgrounnd 中获得了 mongoDB 光标。 【参考方案1】:

MongooseJS 中的 find 方法返回一个 Query 对象(引用)。您可以通过多种方式进行搜索并返回结果。

   campground.find().exec(function(err,result)
      if(err)
        console.log(err);
      
      else
        res.render("index.ejs",campground:result);
      
   );

【讨论】:

你在哪里尝试访问结果? 在 index.ejs 文件中...我也用 index.ejs 文件中的结果替换了露营地 不,您仍然必须将其作为露营地访问,如您所见,我仍然在这里将其作为露营地传递 --- res.render("index.ejs",campground:result) ; 是的,它有效:) :) :) :) finalllllllllllllly 但我不明白.exec 部分为什么使用它?初始代码有什么问题? 如果对您有用,请将答案标记为正确的赞成票,请阅读文档以获取详细说明mongoosejs.com/docs/api.html#model_Model.find【参考方案2】:

我认为你的变量名有冲突

var campground=mongoose.model("campground",campgroundSchema); // here is a campground
app.get("/create",function(req,res)
   campground.find(,function(err,result /* <-- */) // the result is also campgrounnd
      if(err)
        console.log(err);
      
      else
        res.render("index.ejs",campground:result/* <-- */); // pass result instead campgrounnd
      
    )
 );

【讨论】:

你有console.log(result) 吗?结果和你在问题中附上的图片一样吗??

以上是关于ForEach 不能在 mongodb 上工作,但在本地数组声明中工作正常的主要内容,如果未能解决你的问题,请参考以下文章

PHP 的 foreach 如何与 MongoDB 游标配合使用?

Laravel 5.1 不能在集合上使用 @foreach

php mongodb 发现不工作

javascript forEach() 函数如何在 mongodb shell 中迭代文档?

我希望模式以正确的 ID 打开,即在 foreach

如何在不选择模式配置参数的情况下使用 mongoose 在 MongoDB 模式实例化中的关联数组/对象中执行 foreach?