基于多个子文档的MongoDB/Mongoose查询
Posted
技术标签:
【中文标题】基于多个子文档的MongoDB/Mongoose查询【英文标题】:MongoDB/Mongoose query based on multiple subdocuments 【发布时间】:2017-10-01 15:57:41 【问题描述】:我是 MongoDB 和 Mongoose 的新手。我目前正在构建一个应用程序,该应用程序具有一个客户端集合,其中包含客户端拥有的一组帐户。
我想根据客户拥有的帐户的详细信息查询集合。比如我需要返回的客户端是:
clientType:“标准” 有两个帐户: accountType:“FML”,余额:$gt 3000 accountType:“OMG”,余额:$lt 3000以下是示例文档:
clientDetails:
cardNumber: "0123456",
firstName: "Bob",
lastName: "Dole",
clientType: "Standard"
,
accounts: [
accountNumber: "123",
accountType: "FML",
balance: 4000.00
,
accountNumber: "234",
accountType: "OMG",
balance: 2000
]
到目前为止,我只知道如何构建一个查询,该查询可以使用 accountTypes ["FML","OMG] 获取 clientType "Standard" 的客户端,但我不知道如何指定余额条件对于特定的 accountTypes。
ClientModel
.find(
"clientDetails.clientType": "Standard",
"accounts.accountType": $all ["FML", "OMG"]
)
.then(
function() //etc..,
function(err) //etc...
);
【问题讨论】:
【参考方案1】:您可以将$all
与$elemMatch
一起使用。
ClientModel
.find(
"clientDetails.clientType": "Standard",
"accounts":
$all: [
"$elemMatch" : accountType: "FML", balance: $gt: 3000 ,
"$elemMatch" : accountType: "OMG", balance: $lt: 3000
]
)
.then(
function() //etc..,
function(err) //etc...
);
【讨论】:
这很好用。谢谢!我忘了提到客户可能有很多帐户。是否可以过滤掉不符合这些条件的帐户? Np。我认为您无法使用常规查询。您可能必须使用聚合管道。看看这是否有帮助***.com/questions/15117030/… 感谢您的帮助!我去看看。以上是关于基于多个子文档的MongoDB/Mongoose查询的主要内容,如果未能解决你的问题,请参考以下文章
使用聚合 mongodb mongoose 将集合子子文档与其他集合子文档连接起来
mongoDB (mongoose增删改查聚合索引连接备份与恢复监控等等)