我正试图从集合中获取当前文档之前的文档。 '问题'是这个文件的孩子。所以,假设我在'商店'系列中有这个文件:
{
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})
有没有一种很好的方法来获取搜索的最后结果,或者做一个好的查询?
使用$slice
投影
db.collection.find(
{ },
{ "invoices": { "$slice": -1 }}
)
或$elemMatch
投影
db.collection.find(
{ },
{ "invoices": { "$elemMatch": { "_id": ObjectId("5c642b32c17f3d2e4c5dfbdd") }}}
)