返回mongodb中的某些字段

2024-04-27 21:33:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图只返回符合条件的数组。以下是我所拥有的:

{
"_id": 1,
"awardAmount": 20000,
"url": "www.url.com",
"numAwards": 2,
"award": "Faculty Research Grant",
"Type": "faculty",
"Applicants": [
    {
        "preAwards": "NO1",
        "Name": "Omar1",
        "School": "SCSU1",
        "citizenship": "YES1",
        "budget": 1,
        "Advisor": "Dr. DaPonte1",
        "Major": "CSC1",
        "appId": 100,
        "Research": "Test data entry1",
        "Time": "12 months1",
        "URL": "www.url.com",
        "Evaluators": [
            {
                "abstractScore": 11,
                "evalNum": 1,
                "goalsObjectivesScore": 11
            },
            {
                "abstractScore": 22,
                "evalNum": 2,
                "goalsObjectivesScore": 22
            }
        ]
    },
    {
        "preAwards": "NO2",
        "citizenship": "YES2",
        "Major": "CSC2",
        "Time": "12 months2",
        "budget": 2,
        "URL": "www.2.com",
        "appId": 200,
        "Advisor": "Dr. DaPonte2",
        "Name": "Omar2",
        "Research": "Test data entry2",
        "School": "SCSU2",
        "url": "www.2.com"
    },
    {
        "preAwards": "NO3",
        "citizenship": "YES3",
        "Major": "CSC3",
        "Time": "12 months3",
        "budget": 3,
        "URL": "www.3.com",
        "appId": 300,
        "Advisor": "Dr. DaPonte3",
        "Name": "Omar3",
        "Research": "Test data entry3",
        "School": "SCSU3",
        "url": "www.3.com",
        "Evaluators": [
            {
                "abstractScore": 454,
                "evalNum": 1,
                "goalsObjectivesScore": 4546
            }
        ]
    }
]
}

我只想找回那些没有Evaluators字段的申请者。你知道吗

{
"_id": 1,
"awardAmount": 20000,
"url": "www.url.com",
"numAwards": 2,
"award": "Faculty Research Grant",
"Type": "faculty",
"Applicants": [
    {
        "preAwards": "NO2",
        "citizenship": "YES2",
        "Major": "CSC2",
        "Time": "12 months2",
        "budget": 2,
        "URL": "www.2.com",
        "appId": 200,
        "Advisor": "Dr. DaPonte2",
        "Name": "Omar2",
        "Research": "Test data entry2",
        "School": "SCSU2",
        "url": "www.2.com"
    }
]
}

这只是一个文档的示例。我希望所有的申请者在所有文件中没有评估者字段。你知道吗


Tags: nametestcomurldatatimeappidbudget
3条回答

pymongo一起使用聚合

col.aggregate([{"$unwind": "$Applicants"}, {"$match" : {"Applicants.Evaluators": {"$exists": False}}}]))

输出

{'ok': 1.0,
 'result': [{'Applicants': {'Advisor': 'Dr. DaPonte2',
                            'Major': 'CSC2',
                            'Name': 'Omar2',
                            'Research': 'Test data entry2',
                            'School': 'SCSU2',
                            'Time': '12 months2',
                            'URL': 'www.2.com',
                            'appId': 200,
                            'budget': 2,
                            'citizenship': 'YES2',
                            'preAwards': 'NO2',
                            'url': 'www.2.com'},
             'Type': 'faculty',
             '_id': 1,
             'award': 'Faculty Research Grant',
             'awardAmount': 20000,
             'numAwards': 2,
             'url': 'www.url.com'}]}

如果我正确理解您的问题,我建议使用聚合管道来$unwind您的“申请人”字段上的文档。然后可以使用$match筛选结果文档以删除存在“Evaluators”的文档,然后使用$first$push将它们重新组合在一起。希望这能有所帮助。你知道吗

在mongo shell中,您可以执行以下操作:

db.test.find(
{
    Applicants : { $elemMatch : {  "Evaluators" : { $exists : 0 } }}
}, 
{
    "_id" : 1,
    "awardAmount" : 1,
    "url" : 1,
    "numAwards" : 2,
    "award" : 1,
    "Type" : 1,
    'Applicants.$' : 1,         
});

一个问题是,上面的查询只返回一个Applicants,其中没有Evaluators,有效的完整解决方案将通过聚合实现

db.test.aggregate(
[
   { $match : { Applicants : { $elemMatch : {  "Evaluators" : { $exists : 0 } } } } },
   { $unwind : "$Applicants" },
   { $match : { "Applicants.Evaluators" : { $exists : 0 } } },
   {
       $group : 
       {   
           _id : '$_id', 
           Applicants : { $push : '$Applicants' }, 
           awardAmount : { $first : '$awardAmount' } ,
           url : { $first : '$url' } ,
           numAwards : { $first : '$numAwards' } ,
           award : { $first : '$award' } ,
           Type : { $first : '$Type' } ,
       } 
   }
]  
)

相关问题 更多 >