MongoDB/Mongoose 基于多个子文档的查询
MongoDB/Mongoose query based on multiple subdocuments
我是 MongoDB 和 Mongoose 的新手。我目前正在构建一个应用程序,它有一个客户集合,其中包含客户拥有的一系列帐户。
我想根据客户拥有的帐户的具体情况查询集合。例如,我需要 return 客户端是:
- 客户端类型:"Standard"
- 有两个账户:
- 账户类型:"FML",余额:$gt 3000
- 账户类型:"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
}
]
}
到目前为止,我只想出了如何构建一个查询来获取 clientType "Standard" 和 accountTypes ["FML","OMG] 的客户端,但我无法弄清楚如何指定特定帐户类型的余额条件。
ClientModel
.find({
"clientDetails.clientType": "Standard",
"accounts.accountType": { $all ["FML", "OMG"]
})
.then(
function(){ //etc..},
function(err){ //etc...}
);
您可以将 $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...}
);
我是 MongoDB 和 Mongoose 的新手。我目前正在构建一个应用程序,它有一个客户集合,其中包含客户拥有的一系列帐户。
我想根据客户拥有的帐户的具体情况查询集合。例如,我需要 return 客户端是:
- 客户端类型:"Standard"
- 有两个账户:
- 账户类型:"FML",余额:$gt 3000
- 账户类型:"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
}
]
}
到目前为止,我只想出了如何构建一个查询来获取 clientType "Standard" 和 accountTypes ["FML","OMG] 的客户端,但我无法弄清楚如何指定特定帐户类型的余额条件。
ClientModel
.find({
"clientDetails.clientType": "Standard",
"accounts.accountType": { $all ["FML", "OMG"]
})
.then(
function(){ //etc..},
function(err){ //etc...}
);
您可以将 $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...}
);