You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于数组条件筛选符合指定规则的文档

如何实现特定条件的文档筛选?

问题背景

我有一批如下格式的文档(注意:原始内容是多个独立JSON对象,处理前建议转为合法JSON数组):

{ "people" : [ { "Gender" : "Male", "Age" : 31 }, { "Gender" : "Female", "Age" : 22 } ] }
{ "people" : [ { "Gender" : "Male", "Age" : 31 }, { "Gender" : "Female", "Age" : 24 } ] }
{ "people" : [ { "Gender" : "Male", "Age" : 31 } ] }

筛选规则

需要检索满足以下条件的所有文档:

  • 若文档中存在女性(Female),则该女性的Age必须为22;
  • 男性(Male)的年龄不受任何限制。

期望返回结果

{ "people" : [ { "Gender" : "Male", "Age" : 31 }, { "Gender" : "Female", "Age" : 22 } ] }
{ "people" : [ { "Gender" : "Male", "Age" : 31 } ] }

实现方案

方案1:MongoDB数据库查询

如果你的文档存储在MongoDB中,可以直接用以下查询语句完成筛选:

db.collection.find({
  $or: [
    // 分支1:文档中完全没有女性
    { "people.Gender": { $ne: "Female" } },
    // 分支2:文档中有女性,且所有女性的Age都是22
    { 
      "people": { $elemMatch: { "Gender": "Female", "Age": 22 } },
      "people": { $not: { $elemMatch: { "Gender": "Female", "Age": { $ne: 22 } } } }
    }
  ]
})

逻辑说明:

  • 第一个分支直接匹配不含女性的文档;
  • 第二个分支确保两点:存在至少一个年龄为22的女性,同时不存在年龄非22的女性(即所有女性年龄都符合要求)。

方案2:JavaScript脚本本地处理

如果是本地处理JSON数据,先把原始文档整理成合法数组,再用filter方法实现筛选:

// 先将原始文档转为合法JSON数组
const docs = [
  { "people" : [ { "Gender" : "Male", "Age" : 31 }, { "Gender" : "Female", "Age" : 22 } ] },
  { "people" : [ { "Gender" : "Male", "Age" : 31 }, { "Gender" : "Female", "Age" : 24 } ] },
  { "people" : [ { "Gender" : "Male", "Age" : 31 } ] }
];

const filteredDocs = docs.filter(doc => {
  // 提取文档中所有女性条目
  const femaleEntries = doc.people.filter(person => person.Gender === "Female");
  // 无女性则直接通过;有女性则检查所有女性年龄都是22
  return femaleEntries.length === 0 || femaleEntries.every(f => f.Age === 22);
});

console.log(filteredDocs);

执行这段代码后,控制台会输出你期望的结果数组。

注意事项

  • 原始文档是多个独立JSON对象,处理前需要用逗号分隔并包裹在[]中,转为合法JSON数组,否则会出现解析错误;
  • 如果使用其他编程语言或数据库,核心逻辑一致:要么匹配无女性的文档,要么匹配所有女性年龄均为22的文档。

内容的提问来源于stack exchange,提问作者zeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:02:40