简体   繁体   English

如何比较两个 arrays 并获得匹配的 output?

[英]How to compare two arrays and get matching output?

In my collection I have a category array as below.在我的收藏中,我有一个category数组,如下所示。

在此处输入图像描述

I receive another array to my API like below我收到另一个数组到我的 API 如下所示

array = ['Chess','Rugby'];

I want to add a condition to my database query such that catName field from category objects exists in array .我想向我的数据库查询添加一个条件,以便category对象中的catName字段存在于array中。

currently I'm using the below code to get the results:目前我正在使用以下代码来获取结果:

postSchemaModel.aggregate([{
            "$geoNear": {
                "near": { "type": "Point", "coordinates": [parseFloat(long), parseFloat(lat), ] },
                "distanceField": "dist.calculated",
                "maxDistance": parseInt(maxDistance),
                "includeLocs": "dist.location",
                "spherical": true
            }
        },
        { "$match": { "$or": [{ "typology": "post" }, { "typology": "chat_group" }] } },
        {
            "$match": {
                "createdAt": {
                    "$gte": '2020-07-15 23:54:38.673665',
                    "$lt": '2020-06-15 23:54:38.673665'
                }
            }
        },
        { "$limit": limit },
        { "$skip": startIndex },
        { "$sort": { "createdAt": -1 } },
        {
            "$lookup": {
                "from": userSchemaModel.collection.name,
                "localField": "user_id",
                "foreignField": "_id",
                "as": "user_id"
            }
        },
        {
            "$project": {
                "post_data": 1,
                "likes": 1,
                "commentsCount": 1,
                "post_img": 1,
                "isUserLiked": 1,
                "usersLiked": 1,
                'exp_date': 1,
                "has_img": 1,
                "user_id": {
                    "img": "$user_id.img",
                    "_id": "$user_id._id",
                    "user_name": "$user_id.user_name",
                    "bday": "$user_id.bday",
                    "imagesource": "$user_id.imagesource",
                    "fb_url": "$user_id.fb_url",
                },
                "typology": 1,
                "geometry": 1,
                "category": 1,
                "created": 1,
                "createdAt": 1,
                "updatedAt": 1,
            }
        },
    ]).then(async function(posts) {
        //some code here
        }
    });

UPDATE: Sample Output更新:样品 Output

{
            "_id": "5f0bd1b7d6ed4f0017e5177c",
            "post_data": "bitch boy sudesh",
            "likes": 2,
            "commentsCount": 1,
            "post_img": null,
            "isUserLiked": true,
            "usersLiked": [
                "5f0bfa296ee76f0017f13787",
                "5ef60bba10e9090017e2c935"
            ],
            "exp_date": "2020-07-16T00:00:00.000Z",
            "has_img": false,
            "user_id": [
                {
                    "img": [
                        "default-user-profile-image.png"
                    ],
                    "_id": [
                        "5ef9a7a2922eba0017ce47e0"
                    ],
                    "user_name": [
                        "Sudesh"
                    ],
                    "bday": [
                        "1997-05-02T00:00:00.000Z"
                    ],
                    "imagesource": [
                        "fb"
                    ],
                    "fb_url": [
                        "https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=1846836948784193&width=400&ext=1596011605&hash=AeRsB0QJQH7edpRT"
                    ]
                }
            ],
            "typology": "post",
            "geometry": {
                "pintype": "Point",
                "_id": "5f0bd1b7d6ed4f0017e5177d",
                "coordinates": [
                    79.9200017,
                    6.7088167
                ]
            },
            "category": [
                {
                    "_id": "5f0bd1b7d6ed4f0017e5177e",
                    "catID": "5eef80cc5de48230887f3aa8",
                    "catName": "Chess"
                },
                {
                    "_id": "5f0bd1b7d6ed4f0017e5177e",
                    "catID": "5eef80cc5de48230887f3aa8",
                    "catName": "Rugby"
                }
            ],
            "created": 1594610103626,
            "createdAt": "2020-07-13T03:15:03.629Z",
            "updatedAt": "2020-07-18T14:02:35.080Z"
        }

You can use some method if you only want to get true / false result:如果你只想得到true / false结果,你可以使用一些方法:

category.some(element => array.includes(element.catName))

If you want to get an array of all the category objects with cat names that also exist in the array then you can filter method:如果您想获取数组中也存在的所有具有猫名称的category对象的array ,那么您可以过滤方法:

category.filter(element => array.includes(element.catName))

If you have an object called array in your code and you want to find at array of categories where cat names are in the array then you can add the condition to your $match stage:如果您的代码中有一个名为array的 object 并且您想在数组中包含猫名的类别array中查找,那么您可以将条件添加到$match阶段:

  { "$match": { "$or": [{ "typology": "post" }, { "typology": "chat_group" }] }, "category.catName": { $in: array } }

Using another $match with "$elemMatch" solved the problem使用另一个$match"$elemMatch"解决了这个问题

"$match": {
                    "category": { "$elemMatch": { "catName": "Rugby", "catName": "Carrom" } },
                }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM