MongoDB mongoose $ elemMatch用于多个结果

时间:2018-06-06 19:04:56

标签: mongodb mongoose

我有一个查询应该根据时间戳范围条件从文档中的数组返回多个子文档。我首先通过指定一些id来选择主要文档:

在Mongo Shell中它是:

 db.fps.find({"_id": {$in: [15,24] }}, {someArray: {$elemMatch: {Timestamp: {$gt: "2018-06-06T18:00:00", $lt:"2018-06-07"}}}}).pretty()

由于$ elemMatch,它只返回与我的查询匹配的第一个文档。 但是,我希望返回的所有相关文件都符合标准。

我如何在mongoose中进行查询?

1 个答案:

答案 0 :(得分:1)

假设您有这样的文档:

<record model="ir.values" id="wizard_wizard_print_product_label">
    <field name="name">Print Product Label</field>
    <field name="key">action</field>
    <field name="key2">client_action_multi</field>
    <field name="model">product.template</field>
    <field name="value" eval="'ir.actions.act_window,' + str(ref('printer_zpl2.action_wizard_print_record_label_view'))"/>
</record>

要过滤嵌套数组,您需要聚合框架,其中db.fps.save({_id: 15, someArray: [ { Timestamp: "2018-06-06T19:00:00" }, { Timestamp: "2018-06-06T19:00:00" }, { Timestamp: "2018-06-07T00:00:00" } ]}); 代表您的匹配条件,$filter将应用时间戳比较。 $addFields只是覆盖此处结果集中的$match

someArray