Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查询集合值​;和参考文件值​;在MongoDB?_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

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);

我正在学习MongoDBaggregation,但我对它的所有功能都不太了解。请告诉我如何以传统方式正确执行此类请求?我将非常感激

DBRef是一个客户端构造。在服务器端使用它并不容易。
db.collection.aggregate([
{$unwind:"$houses"},
{$match:{"houses.district":"Texas","houses.events":{$elemMatch:{"kind":"developer"}}}},
{$group:{
    _id:null,
    houses:{$push:"$houses"}
}},
{$project:{_id:0}}])