javascript - mongoose,如何查询对象数组中的最大值或最小值并返回对象

标签 javascript node.js mongodb mongoose

我有数组[对象]架构:

var operation = new Schema({
    name:{type:String},
    number:[Number],
});

var Info = new Schema({
    serialNumber:{type:Number}
    operation:[operation],
}); 

数据示例:

{
   serialNumber: 25,
   operation:[
     {
        name:'jack',
        number:1,
     },{
        name:'may',
        number:2,
     },{
        name:'alexander ',
        number:3,
     },
   ]
}

如何在serialNumber: 25时查询集合并返回对象,

在这种情况下将返回此

{
  name:'alexander ',
  number:3,
},
<小时/>

我已经尝试过aggregate() sort()

但是aggregate()无法选择条件(例如:serialNumber: 25)并且无法返回单个对象,find().sort ()可以选择条件,但无法对内部数组对象进行排序。

最佳答案

您可能应该回去阅读有关聚合管道的文档,因为您似乎错误地理解了它的使用方式和作用。使用聚合管道执行此操作的步骤有点长,但您可以轻松完成所有这些。可能有一些捷径可走,但这里是长版本。

db.getCollection('bar').aggregate([
    {$match: {serialNumber: <number>}}, //use match to find based on serial number
    {$unwind: '$operation'}, //unwind the operation array
    {$sort: {'operation.number': -1}}, //sort operation number desc
    {$limit: 1}, //get only first item
    {$project: {_id: 0, name: '$operation.name', number: '$operation.number'}} //project the object and attributes you want
])

然后,您可以从 results 数组中取出第一项,或者考虑从聚合框架返回游标。

关于javascript - mongoose,如何查询对象数组中的最大值或最小值并返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46536150/

相关文章:

node.js - 如何在 Node 应用程序中配置 Hystrixjs?

node.js - socket.io - io.sockets.adapter 对象?

javascript - 客户端如何从mongodb获取数据?

node.js - Mongodb 架构/模型中文件的字段类型是什么?

javascript - 单击事件后打开新窗口在 Safari、Chrome 中不起作用

javascript - History back() 方法不适用于 Internet Explorer

node.js - 是否可以通过对位于该函数的单独 Firebase 项目中的 Firestore 的更改来触发 Firebase 函数?

mongodb - 如何获取mongodb中的最后N条记录?

javascript - 如何在 <text> 元素中使用 CSS 过渡效果?

javascript - 如何在 HTML 中显示函数的结果