从 mongoose find() 查询中提取一个值

Posted

技术标签:

【中文标题】从 mongoose find() 查询中提取一个值【英文标题】:Extract a value out of mongoose find() query 【发布时间】:2018-12-22 13:57:10 【问题描述】:

在 find ("-_id services.location") 的 mongoose 查询中,stringifying 的输出是:

[
   
      "services":[
         
            "location":[
               17.4374614,
               78.7482878
            ]
         ,
         
            "location":[
               17.4020637,
               78.18400519324596
            ]
         ,
         
            "location":[
               17.56208737,
               78.284005186526
            ]
         ,
         
            "location":[
               17.5620637,
               78.3240051999554
            ]
         
      ]
   
]

有什么方法可以让我从我得到的输出中访问每个单独的位置值,例如(17.4374614、78.7482878、17.4020637....)。

我的架构如下:-

var serviceSchema = new mongoose.Schema(
    location:[type: Number]
)

【问题讨论】:

在下面查看我的答案,也试试我分享的链接。 【参考方案1】:

您正在寻找的是 $reduce$concatArrays 运算符。

[
  
    "$project": 
      "result": 
        "$reduce": 
          "input": "$services.location",
          "initialValue": [],
          "in": 
            "$concatArrays": [
              "$$this",
              "$$value"
            ]
          
        
      
    
  
]

See demo

【讨论】:

感谢您的解决方法。有没有办法只将没有 _id 的结果值数组呈现到模板中。我只需要渲染结果数组的值 很好的答案@styvane!为你+1!! @Drunken Lord 检查此链接我已更新他的查询以满足您的要求:mongoplayground.net/p/EKm7PBH7NTy【参考方案2】:

更新了答案:

有没有办法只渲染没有 _id 的 loc 值数组 进入模板。我只需要渲染 loc 数组的值

您可以这样做:https://mongoplayground.net/p/VhrZKxg6OC1

db.collection.aggregate([
  
    $unwind: "$services"
  ,
  
    $unwind: "$services.location"
  ,
  
    $project: 
      "_id": "$_id",
      "location": "$services.location"
    
  ,
  
    $group: 
      _id: "_id",
      loc: 
        $push: "$location"
      
    
  ,
  
    $project: 
      "_id": 0,
      "locationArray": "$loc"
    
  
])

这将导致:

[
  
    "locationArray": [
      17.4374614,
      78.7482878,
      17.4020637,
      78.18400519324597,
      17.56208737,
      78.284005186526,
      17.5620637,
      78.3240051999554
    ]
  
]

希望它能解决您的问题。

【讨论】:

感谢您的解决方法。有没有办法只将没有 _id 的 loc 值数组呈现到模板中。我只需要渲染 loc 数组的值。 只需添加一个带有 _id:0 和 loc:”$loc” 的项目语句 我已将项目声明更改为:- $project: "_id": "0", "location": "$services.location", "loc":"$loc" 然而查询的结果不是表单LOC:[17.4374614,78.7482878,178.748287,7840051932597,17.56208737,78.56208737,78.284005186526,178.28400519526,17.5620637,78.3240051999554]我想仅发送LOC的平面阵列值 span> 太棒了!万分感谢! :)

以上是关于从 mongoose find() 查询中提取一个值的主要内容,如果未能解决你的问题,请参考以下文章

从 Mongoose Find() 查询向对象数组添加属性 [重复]

从 Mongoose Find() 查询向对象数组添加属性 [重复]

未找到结果时如何从 Mongoose Find 查询返回自定义消息而不是空数组

使用 Mongoose 从 Decimal128 中提取十进制 - MongoDB

如何从 find 方法返回 Mongoose 结果?

mongoose使用之查询篇