【问题标题】:get MongoDB results as objects instead of array将 MongoDB 结果作为对象而不是数组获取
【发布时间】:2013-05-09 15:56:46
【问题描述】:

我是 MongoDB 新手,我正在尝试以不同的方式获得结果。

如果我执行查询 db.collection.find().toArray() 我会得到类似的结果:

[
  {
    "_id":"34234...",
    "first":"Mark",
    "last":"Marker"
  },
  {
    "_id": "34235...",
    "first":"Adam",
    "last":"Smith"
  }
]

是否有 api 可以让您接收如下结果?:

{
 "results" : {

  "34234..." :{
    "_id":"34234...",
    "first":"Mark",
    "last":"Marker"
  },
  "4235..." :{
    "_id": "34235...",
    "first":"Adam",
    "last":"Smith"
  }

 }

或者我需要获取结果数组并迭代每个对象并构建我的响应? (我想避免单光标迭代)

【问题讨论】:

    标签: json mongodb object find


    【解决方案1】:

    我不相信有一个原生 API 函数可以做到这一点。 cursor.toArray() 遍历光标中的每个项目开头,所以我不会太担心。我们可以跳过toArray() 并进行我们自己的迭代:

    var obj = {}
    db.collection.find().each(function(item){
      obj[item._id] = item;
    });
    

    我不认为这真的会更慢。

    【讨论】:

    • 好吧,我想避免这个解决方案,因为我的收藏在另一台服务器上,所以我想“each()”函数将是对服务器的请求(我错了吗?)如果没有API,我之前的想法没有错,我认为解决方案是获取结果数组并通过(例如)NodeJS 构建我的响应来迭代它。
    • 我不确定我是否理解。您必须以一种或另一种方式从服务器上获取数据,对吗?该解决方案不会进行任何toArray 无论如何都不会进行的迭代或访问(它像each 一样消耗光标)。遍历toArray() 的结果效率有点低,因为它必须遍历游标,然后遍历数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2019-11-19
    • 2021-05-22
    相关资源
    最近更新 更多