我正在尝试从集合中获取当前文档之前的文档。 “问题”在于文档的子级中。 假设我在“商店”集合中有此文档:
{
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})
是否有一种仅获取搜索的最后结果的好方法,还是做一个好的查询?
答案 0 :(得分:1)
使用$slice
投影
db.collection.find(
{ },
{ "invoices": { "$slice": -1 }}
)
或$elemMatch
投影
db.collection.find(
{ },
{ "invoices": { "$elemMatch": { "_id": ObjectId("5c642b32c17f3d2e4c5dfbdd") }}}
)