从MongoDB中的模式中返回一个json

我有以下文件:

{ "id": "someString", "servers": [ { "name": "ServerName", "bases": [ { "name": "Base 1", "status": true }, { "name": "Base 2", "status": false } ] } ] } 

我想创build一个API路由来获得一个JSON,只包含状态是真实的基地的名称。

我目前的项目依赖关系是:

 "dependencies": { "basic-auth": "^1.1.0", "body-parser": "~1.0.1", "express": "~4.0.0", "mongoose": "~4.6.8", "mongoose-unique-validator": "^1.0.4", "morgan": "~1.0.0" } 

任何帮助表示赞赏! 谢谢!

@编辑

忘了提及,我正在使用mongoose。模式对象:

 var ClienteSchema = new Schema({ id: { type: String, required: true, unique: true }, servers: [{ nome : String, bases: [{ nome: String, status: Boolean }] }] }); 

困难是导航到客户Cliente > servers > bases获得status并返回基地的nome … 🙁

你可以使用下面的聚合。

下面的查询使用$map来遍历servers数组,并保留name ,然后使用$filter来保持basesstatus值为true以转换输出。

 Model.aggregate({ $project: { id: 1, servers: { $map: { input: "$servers", as: "server", in: { name: "$$server.name", bases: { $filter: { input: "$$server.bases", as: "base", cond: { $eq: ["$$base.status", true] } } } } } } } }).exec(function(err, user) { console.log(JSON.stringify(user)); }) 

样本回应:

 { "id": "someString", "servers": [{ "name": "ServerName", "bases": [{ "name": "Base 1", "status": true }] }] } 

我假设你的文档是Mongo模型。 如果是的话,我把它命名为Foo。

 var Foo = require(./path/to/foo); Foo.find({ 'servers.bases.status': true }) .select('servers.bases.name') .exec(function(err, name) { // your business }); }); 

告诉我,如果我误解了这个问题。