【问题标题】:How to retrieve data using Mongoose and node.js from MongoDB如何使用 Mongoose 和 node.js 从 MongoDB 检索数据
【发布时间】:2019-01-21 19:01:46
【问题描述】:

我需要根据用户输入使用mongoose and Node.js 检索文档 mongoDB。我在下面解释我的collection schema

{
  zone_list: [{
    zone: NORTH,
    state_list: [{    
      state: DELHI,
      location_list: [{
        location: NEW DELHI,
        task_list: [{
          user_pkId: 5c407834953d7f420d56f866,
          front_end_manager_name: SONAL,
          collection_manager: "",
          area_collection_manager: ASHIS JENA,
          loan_accounts_assigned: [{
            allocated_to: FIELD,
            lk_loan_account_id: LK0000015094,
            cl_contract_id: LAI-00016881,
            customer_name: REET INFOTECH,
            customer_bank_name: YES BANK,
          }]
        }]
      }]
    },{
      state: JK,
      location_list: [{
        location: Sree Nagar,
        task_list: [{
          user_pkId: 5c407834953d7f420d56f867,
          front_end_manager_name: SONAL,
          collection_manager: "",
          area_collection_manager: ASHIS JENA,
          loan_accounts_assigned: [{
            allocated_to: FIELD,
            lk_loan_account_id: LK0000015094,
            cl_contract_id: LAI-00016881,
            customer_name: REET INFOTECH,
            customer_bank_name: Corporate BANK,
          }]
        }]
      }]
    }]
  },{
    zone: EAST,
    state_list: [{    
      state: Odisha,
      location_list: [{
        location: Bhubaneswar,
        task_list: [{
          user_pkId: 5c407834953d7f420d56f868,
          front_end_manager_name: SONAL,
          collection_manager: "",
          area_collection_manager: ASHIS JENA,
          loan_accounts_assigned: [{
            allocated_to: FIELD,
            lk_loan_account_id: LK0000015094,
            cl_contract_id: LAI-00016881,
            customer_name: REET INFOTECH,
            customer_bank_name: SBI BANK,
          }]
        }]
      }]
    }]
  }]
}

这里我有上面的一个文档,其中包含多个区域、状态等。我需要根据zone,state,locations...etc 获取相应的记录。我正在使用如下查询。

var zone = req.body.zone;
var allction = db.model("Allocation", alloc);
allction.connection.find({zone: zone}, function(err, docs) {
   if (!err) {
      res.send(docs);
   }
})

但是在这里我没有得到预期的输出。我需要使用zone 输入我应该得到相关记录类似使用zone and state 我应该得到相应的输出。

【问题讨论】:

  • 您能否补充一下,您期望 [doc] 的输出以及您目前得到的结果是什么?
  • 嘿再次进入频道

标签: node.js mongodb mongoose


【解决方案1】:

所以,根据您的问题,您希望首先从文档中找到该区域。

您可以使用positional operator($) 执行类似的操作:

allction.connection.find({"zone_list.zone":zone},{projection:{
"zone_list.$":1
//list other fields what you want to select or project
}}).toArray(function(err,docs){
        if (!err) {
            res.send(docs);
        }
})

另外,如果你想 ry 聚合查询会更像这样:

allction.collection
  .aggregate([
    { $match: {} },
    { $unwind: "$zone_list" },
    { $unwind: "$zone_list.state_list" },
    { $unwind: "$‌​zone_list.state_list.location_list" },
    {
      $match: {
        zone: zone,
        state: state,
        location: location
      }
    }
  ])
  .toArray((err, docs) => {});

【讨论】:

  • 它抛出这个TypeError: Converting circular structure to JSON 错误。
  • 更新了答案,可以再试一次告诉我吗?
  • 使用更新后的代码检索总文档。我需要按区域获取数据数组。
  • @subhra 我的错,而不是选择它需要projection。再次更新,请看。
  • 好的,它按预期工作,但如果说我需要根据区域和状态再次过滤。那你能帮我查询一下吗?
猜你喜欢
  • 2019-06-14
  • 1970-01-01
  • 2015-09-20
  • 2017-05-13
  • 2014-11-27
  • 2020-01-13
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多