从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
来保持bases
的status
值为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 }); });
告诉我,如果我误解了这个问题。