如何计算另一个数组 MongoDB 中数组中的匹配元素
Posted
技术标签:
【中文标题】如何计算另一个数组 MongoDB 中数组中的匹配元素【英文标题】:How to count matched elements from an Array in another Array MongoDB 【发布时间】:2018-01-27 08:40:17 【问题描述】:我正在使用 MongoDB Aggregate 框架来查询用户集合。
这是以下用户架构布局的示例:
"_id" : ObjectId("XXXXXXXXXXXXXX367db"),
"updatedAt" : ISODate("2017-08-18T10:59:54.904Z"),
"createdAt" : ISODate("2017-08-18T10:59:54.904Z"),
"email" : "fake57@gmail.com",
"firstName" : "Tianna.",
"gender" : "male",
"geometry" :
"coordinates" : [
-6.26119,
53.35247
],
"_id" : ObjectId("5996c8a9a4d84d3639c367dc"),
"type" : "point"
,
"age" : 25,
"personalAttributes" : [
"ksjdnksajdna",
"ksjdssacasca",
"xz12nksajdna",
"xz12nksaxxna",
"xz12nksaxxxx",
"xz12nwwzwwwa",
"xz12nkslkmna",
]
这是聚合管道中概述的步骤。
1:使用 $geoNear 运算符对指定距离内的用户进行地理定位。
2:根据性别匹配用户。
db.getCollection('users').aggregate([
"$geoNear":
"near":
"type": "Point",
"coordinates": [
-6.26030969999999,
53.3498053
]
,
"distanceField": "dist.calculated",
"spherical": true,
"maxDistance": 770000
,
"$match":
"gender": "male"
])
我想要做的是传递另一个用户的个人属性数组并计算每个数组中匹配项的数量。它看起来像这样:
db.getCollection('users').aggregate([
"$geoNear":
"near":
"type": "Point",
"coordinates": [
-6.26030969999999,
53.3498053
]
,
"distanceField": "dist.calculated",
"spherical": true,
"maxDistance": 770000
,
"$match":
"gender": "male"
,
"$project":
"_id": 1,
"gender": 1,
"firstName": 1,
"profileImage": 1
"personalAttributesMatches":
//Pass in the users personalAttributes Array and count the number of matches and return all the data.
])
预期输出为
/* 1 */
"_id" : ObjectId("5996c8aaa4d84d3639c36a61"),
"firstName" : "Sharon",
"gender" : "male",
"personalAttributesMatches": 15
/* 2 */
"_id" : ObjectId("5996c9c41daf273658715fcf"),
"firstName" : "Hilton",
"gender" : "male",
"personalAttributesMatches": 11
/* 3 */
"_id" : ObjectId("5996c6d66f8910361b8232b5"),
"firstName" : "Eliezer",
"gender" : "male",
"personalAttributesMatches": 7
对此的见解将不胜感激!
【问题讨论】:
【参考方案1】:您可以使用setIntersection 表达式,因此您的项目阶段可以如下所示:
"$project":
"_id": 1,
"gender": 1,
"firstName": 1,
"profileImage": 1,
"personalAttributesMatches":
$size:
$setIntersection: ["$personalAttributes", _other_persons_attributes_]
【讨论】:
非常感谢我现在要在猫鼬框架上测试它!一旦我得到它的工作,我会将您的答案标记为正确。再次感谢!以上是关于如何计算另一个数组 MongoDB 中数组中的匹配元素的主要内容,如果未能解决你的问题,请参考以下文章