在mongo中_id之前获取子对象

问题描述 投票:1回答:1

我正试图从集合中获取当前文档之前的文档。 '问题'是这个文件的孩子。所以,假设我在'商店'系列中有这个文件:

{
    name: 'Test Shop',
    invoices: [
        {
            _id: ObjectId("5c642436dc12625a909d8115"),
            date: '2019-02-13 08:05:42.087Z',
            value: 0
         },
         {
            _id: ObjectId("5c6429bcc17f3d2e4c5dfb61"),
            date: '2019-02-13 14:29:16.882Z',
            value: 1
         },
         {
           _id: ObjectId("5c642b32c17f3d2e4c5dfbdd"),
            date: '2019-02-13 12:35:30.275Z',
          value: 2
         }
     ]
}

我有最新的发票对象'value:2'现在我想在此对象之前获取对象。 'value:1'的对象。

我试图用这个查询做到这一点,但它让我回到第一个对象(我认为搜索的第一个结果)

db.getCollection('shops').find({
    'invoices._id': { 
        $lte: ObjectId("5c642b32c17f3d2e4c5dfbdd")
     }
}, {'invoices.$':1}).sort({'invoices.date':1})

有没有一种很好的方法来获取搜索的最后结果,或者做一个好的查询?

mongodb
1个回答
1
投票

使用$slice投影

db.collection.find(
  { },
  { "invoices": { "$slice": -1 }}
)

$elemMatch投影

db.collection.find(
  { },
  { "invoices": { "$elemMatch": { "_id": ObjectId("5c642b32c17f3d2e4c5dfbdd") }}}
)
© www.soinside.com 2019 - 2024. All rights reserved.