我有数组[对象]架构:
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/