MongoDB只返回匹配的数组元素

本文介绍了如何在MongoDB中通过查询仅返回匹配特定条件的数组元素,利用Morphia进行操作。内容包括举例说明了一个集合的结构,以及如何使用Morphia查询来筛选出符合条件的数组项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、有如下集合:

db.bankcard.find().pretty()

{
    "_id" : ObjectId("594b95245557e13770310dd6"),
    "bankCards" : [
        {
            "accountNo" : 1343
        },
        {
            "accountNo" : 1234
        }
    ]
}
2、只想返回 accountNo为1343的数组元素:

{
    "_id" : ObjectId("594b95245557e13770310dd6"),
    "bankCards" : [
        {
            "accountNo" : 1343
        }
    ]
}
3、但是使用如下查询方式,返回了所有数据:

db.bankcard.find({_id: ObjectId("594b95245557e13770310dd6"),"bankCards.accountNo": 1343}).pretty()
4、要想只返回1343的数组元素,使用以下方式:

db.bankcard.find({_id: ObjectId("594b95245557e13770310dd6"),"bankCards.accountNo": 1343}, {"bankCards.$": 1}).pretty()
{
    "_id" : ObjectId("594b95245557e13770310dd6"),
    "bankCards" : [
        {
            "accountNo" : 1343
        }
    ]
}
在需要对数组中的值进行操作的时候,可通过位置或者定位操作符("$").数组是0开始的,可以直接将下标作为键来选择元素。

5、mophia 查询

BankCard bankCard = (BankCard)this.q().retrievedFields(true, "bankCards.$")
         .filter("memberId", new ObjectId(uid))
         .filter("bankCards.accountNo", bankCards.getAccountNo())
         .get();

 System.out.println(bankCard.getBankCards().get(0).getAccountNo());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值