在mongo中_id之前获取子对象

时间:2019-02-13 16:13:09

标签: mongodb

我正在尝试从集合中获取当前文档之前的文档。 “问题”在于文档的子级中。 假设我在“商店”集合中有此文档:

{
    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
         }
     ]
}

我有最新的发票对象,其值是“ 2” 现在,我想先获取该对象。具有“值:1”的对象。

我正在尝试使用此查询来执行此操作,但它使我始终返回第一个对象(我认为搜索的第一个结果)

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

是否有一种仅获取搜索的最后结果的好方法,还是做一个好的查询?

1 个答案:

答案 0 :(得分:1)

使用$slice投影

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

$elemMatch投影

db.collection.find(
  { },
  { "invoices": { "$elemMatch": { "_id": ObjectId("5c642b32c17f3d2e4c5dfbdd") }}}
)