Javascript 如何查询集合值;和参考文件值;在MongoDB?
我不知道我如何正确地表述这个问题。我需要对这两个值执行查询集合和值的引用对象的名称 原始集合如下所示:Javascript 如何查询集合值;和参考文件值;在MongoDB?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我不知道我如何正确地表述这个问题。我需要对这两个值执行查询集合和值的引用对象的名称 原始集合如下所示: { "houses": [ { "_id": "5fe72f0b4fd2c131bcc7dae0", "name": "John", "district": "Texas", "
{
"houses": [
{
"_id": "5fe72f0b4fd2c131bcc7dae0",
"name": "John",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504c",
"kind": "developer",
"group": "facebook"
}
]
},
{
"_id": "5fe72f0b4fd2c131bcc7dadf",
"name": "Michael",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504b",
"kind": "advertiser",
"group": "instagram"
}
]
},
{
"_id": "5fe72f0b4fd2c131bcc7dade",
"name": "Frank",
"district": "Washington",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504a",
"kind": "developer",
"group": "school"
}
]
}
]
}
当执行满足条件的查询时,我需要得到以下结果:
{
"houses": [
{
"_id": "5fe72f0b4fd2c131bcc7dae0",
"name": "John",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504c",
"kind": "developer",
"group": "facebook"
}
]
},
{
"_id": "5fe72f0b4fd2c131bcc7dadf",
"name": "Michael",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504b",
"kind": "advertiser",
"group": "instagram"
}
]
}
]
}
{
"houses": [
{
"_id": "5fe72f0b4fd2c131bcc7dae0",
"name": "John",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504c",
"kind": "developer",
"group": "facebook"
}
]
},
{
"_id": "5fe72f0b4fd2c131bcc7dade",
"name": "Frank",
"district": "Washington",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504a",
"kind": "developer",
"group": "school"
}
]
}
]
}
在此条件下:kind==“developer”
,得到以下结果:
{
"houses": [
{
"_id": "5fe72f0b4fd2c131bcc7dae0",
"name": "John",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504c",
"kind": "developer",
"group": "facebook"
}
]
},
{
"_id": "5fe72f0b4fd2c131bcc7dadf",
"name": "Michael",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504b",
"kind": "advertiser",
"group": "instagram"
}
]
}
]
}
{
"houses": [
{
"_id": "5fe72f0b4fd2c131bcc7dae0",
"name": "John",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504c",
"kind": "developer",
"group": "facebook"
}
]
},
{
"_id": "5fe72f0b4fd2c131bcc7dade",
"name": "Frank",
"district": "Washington",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504a",
"kind": "developer",
"group": "school"
}
]
}
]
}
对于满足以下条件的查询:district==“Texas”&&kind==“developer”
,获取结果:
{
"houses": [
{
"_id": "5fe72f0b4fd2c131bcc7dae0",
"name": "John",
"district": "Texas",
"events": [
{
"_id": "5fe73e91ede45b3d2eca504c",
"kind": "developer",
"group": "facebook"
}
]
}
]
}
查询应使用express路线内的mongoose执行,并且应是通用的,处理不同的请求参数集:
router.get('/report', (req, res) => {
let params = {};
let { district, kind } = req.headers;
if (district) params["district"] = district;
if (kind) params["kind"] = kind;
// Here should be the query
});
房屋
模型参考事件
:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const HouseSchema = new Schema({
name: String,
district: String,
events: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Event'
}]
});
module.exports = mongoose.model('House', HouseSchema);
我正在学习MongoDB和aggregation,但我对它的所有功能都不太了解。请告诉我如何以传统方式正确执行此类请求?我将非常感激 DBRef是一个客户端构造。在服务器端使用它并不容易。
db.collection.aggregate([
{$unwind:"$houses"},
{$match:{"houses.district":"Texas","houses.events":{$elemMatch:{"kind":"developer"}}}},
{$group:{
_id:null,
houses:{$push:"$houses"}
}},
{$project:{_id:0}}])