2017-01-01 21 views
0

我最近开始深入研究JavaScript和NodeJS来为我的论文构建一个项目。Mongoose查询:根据对象参数插入html分隔符

我有一个集合(植物)与它的对象(园丁:String)将财产

它被查询的路线:

app.get("/", function(req, res) { 
    Plant.find({}).sort('gardener').exec(function(err, plants){ 
     if (err) { console.log(err); } 
     else { 
      res.render("index", {plants: plants}); 
     } 
    }); 
}); 

如何,我可以告诉所有的植物,但为每个园丁分配一个分隔符? (园丁将是一个用户,因此,可以限制)

喜欢的东西

<h4>Gardener <%=plant.gardener%></h4> 
[here goes a list of the plants of this gardener] 

例如(中/渲染):

<h4>Gardener Mary</h4> 
... (list of Mary's plants) 

<h4>Gardener Joseph</h4> 
... (list of Joseph's plants) 

<h4>Gardener George</h4> 
... (list of George's plants) 

[...] 

PS:我知道最好的是将园丁定义为用户的参考,但这将是下一步:)

回答

2

在您的其他语句中,您可以重新组织您的植物数组:

var newPlants = []; 
var aux = []; 
var previousGardener = ""; 

plants.forEach(function(plant) { 
    if(previousGardener === plant.gardener) { 
     aux.push(plant); 
     return ; 
    } 
    if(previousGardener !== "") { 
     newPlants.push({ gardener: previousGardener, plants: aux }); 
     aux = []; 
    } 
    aux.push(plant); 
    previousGardener = plant.gardener; 
}); 

if(aux.length > 0) newPlants.push({ gardener: previousGardener, plants: aux }); 
res.render("index", { plants: newPlants }); 

和你的HTML代码将是这样的:

<% for(var i = 0 ; i < plants.length ; i++) { %> 
    <h4><%= plants[i].gardener %></h4> 
    <ul> 
    <% for(var j = 0 ; j < plants[i].plants.length ; j++) { %> 
     <li><%= plants[i].plants[j].description %></li> 
    <% } %> 
    </ul> 
<% } %> 

我写了这对飞所以道歉,如果事情是错误的。

还有新年快乐:)

+0

它的工作!谢谢! –

+0

等一下。它没有显示所有对象......它以某种方式隐藏了一些对象。 –

+0

你可以在res.render之前做console.log(newPlants)并在这里发布吗? –