Mongoose根据条件选择数组中的元素

Mongoose根据条件选择数组中的元素,mongoose,Mongoose,我有一个简单的模式: { bank: { transactions: [ { notify: Boolean } ] } } 我只想选择notify标志设置为true的事务, 我尝试了几种使用moongose的方法,但没有成功,例如: Bank.findById("58efbb1a88efbf2028d2f5a7")

我有一个简单的模式:

{
    bank: {
            transactions: [
                {
                    notify: Boolean
                }
            ]
    }
}
我只想选择notify标志设置为true的事务, 我尝试了几种使用moongose的方法,但没有成功,例如:

 Bank.findById("58efbb1a88efbf2028d2f5a7")
     .where("transactions.notify").equals(true)
     .exec(function (err, tx) {
         console.log(err);
         console.log(res);
         res.json(tx);
     });

Bank.find({_id: "58efbb1a88efbf2028d2f5a7", "transactions": {$elemMatch : {"notify" : true}}},
    function (err, txs) {
        if (err) {
            res.json(err);
        } else {
            res.json(txs);
        }
    });
使用moongose是否仍然可以执行此操作?

使用聚合和:


当你说none起作用时,你的查询结果是什么?@i确定第一个返回一个空对象,第二个返回整个(银行)对象,如果它至少有一个notify设置为trueNope的事务,该事务返回整个数组,该事务从你在问题中发布的模型返回null,它应该可以查看哪些只返回
notify
设置为
true
的事务。
Bank.aggregate([{
        "$match": {
            "_id": mongoose.Types.ObjectId("58efbb1a88efbf2028d2f5a7")
        }
    }, {
        "$project": {
            "transactions": {
                "$filter": {
                    input: "$bank.transactions",
                    as: 'data',
                    cond: { "$eq": ["$$data.notify", true] }
                }
            }
        }
    }],
    function(err, txs) {
        if (err) {
            res.json(err);
        } else {
            res.json(txs);
        }
    });
Bank.find({'_id': '58efbb1a88efbf2028d2f5a7', 'transactions.notify': true},
    function (err, txs) {
        if (err) {
            res.json(err);
        } else {
            res.json(txs);
        }
    }
);