mongoose - Mongoose find() 所有 json 对象
问题描述
下面的代码有效并且能够找到第一个 JSON 对象的所有参数
public async getAllFeaturesByFlagParams(searchFeature: SearchFeatureDto): Promise<FeatureDto[]> {
return this.searchFeatureModel
.find({ flags: { $elemMatch: searchFeature.flags[0] } })
.then((features) => {
return features.map((flagDocument) => {
const featureDto = new FeatureDto();
featureDto.mapFromSchema(flagDocument);
return featureDto;
});
})
}
但是,我希望能够搜索flags
而不仅仅是flags[0]
. 并能够返回所有searchFeature
匹配的东西flags
,我一直在为此苦苦挣扎。我怎样才能使这项工作?
但是我怎样才能.find()
使用数组呢?
flags 只是一个 JSON 文档
flags {
featureFlagId :"124"
name :"exampleName"
}
示例 mongoose 文档返回:
对于Features
:
[
{
"flags": [
{
"featureFlagId": "124",
"name": "exampleName"
}
],
"name": "exampleFeature1",
},
{
"flags": [
{
"featureFlagId": "123",
"name": "exampleName"
}
],
"name": "exampleFeature2",
}
]
解决方案
考虑到您有类似以下数据的内容searchFeature.flags
,
searchFeature.flags = [
{ featureFlagId: "1", name: "flagName" },
{ featureFlagId: "2", name: "flagName" }
];
你需要准备数组$and
操作,
var searchFlags = searchFeature.flags.map(function(f){
return { flags: { $elemMatch: f } };
});
上面的代码将导致searchFlags
,
[
{ flags: { $elemMatch: { featureFlagId: "1", name: "flagName" } } },
{ flags: { $elemMatch: { featureFlagId: "2", name: "flagName" } } }
]
$and
如果要匹配所有标志,请检查条件,
.find({ $and: searchFlags })
$or
如果要匹配任何单个标志,请检查条件,
.find({ $or: searchFlags })
推荐阅读
- django - 如何在 django-allauth 中添加电子邮件黑名单选项?
- python - 为什么 Sympy .Norm() 不将实值符号视为实数?为什么 Sympy 积分声称 a 0.25 不能以 a*x**b 的形式表示?
- css - 元素的不同显示取决于 css 选择器
- java - 在比赛场景中更新里程表/赛车类有困难
- laravel - [Route: Kategori.destroy] [URI: Model/Kategori/{Kategori}] 缺少必需的参数
- python - 是否可以使用 Paramiko 上传文件夹?
- java - 如何在 Runnable 中提供影响当前活动的回调函数
- jsonschema - 如何使用 JSON Schema 按类型限制数组中的最大项目数?
- c# - 当我使用 c# 在 iis 上托管应用程序时,Quartz 调度程序不起作用
- javascript - 不同对象之间的javascript对象属性分配