gpt4 book ai didi

mongodb - 如何获取 Meteor 中数组交集的 react 数据?

转载 作者:可可西里 更新时间:2023-11-01 10:43:46 25 4
gpt4 key购买 nike

假设我有一个用户集合,每个用户都有一个包含他喜欢的页面的数组(想象一下 facebook 页面 id):

当前用户:

{
name: "me",
likes: [123,234,777]
}

目标列表:

{
name: "Jane",
likes: [111,222,333]
},
{
name: "Mary",
likes: [567,234,777,654]
},
{
name: "John",
likes: [123,234,567,890,777]
},
{
name: "Steve",
likes: [666,777,321,432,543]
},

结果:

{
name: "John",
likes: [123,234,777]
},
{
name: "Mary",
likes: [234,777]
},
{
name: "Steve",
likes: [777]
},
{
name: "Jane",
likes: []
},

我想获得一份由我最喜欢的用户订购的用户的响应式(Reactive)发布。我需要' react 性,因为每个用户都有用户存在 - 在线/离线。带有喜欢 ID 的数组是静态的,但用户的存在会随着时间的推移而变化。

最佳答案

我将把发布/订阅和响应部分留给您,但是执行集合交集的一般机制可以使用聚合框架来执行,而无需在代码中迭代结果。

值得注意的是,这只是一个服务器端函数,您需要获取对底层“节点 native 驱动程序”的引用才能调用 .aggregate()目前方法:

var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;

事实上,对于 MongoDB 2.6 及更高版本,有一个 $setIntersection可用于简化此操作的运算符:

db.targets.aggregate([

// You probably want a $match to find "friends" first
{ "$match": { "_id": { "$in": [ friends ] } } },

// Project the set intersection
{ "$project": {
"name": 1,
"likes": {
"$setIntersection": [ "$likes", [123,234,777] ]
}
}}
])

MongoDB 2.6之前的版本基本上还是可以的,你只需要手动完成所有$setIntersection的工作。运营商允许:

db.targets.aggregate([

// You probably want a $match to find "friends" first
{ "$match": { "_id": { "$in": [ friends ] } } },

// Project an array with the matching values
{ "$project": {
"name": 1,
"likes": 1,
"mylikes": { "$cond": [ 1, [123,234,777], 0 ] }
}},

// Unwind both of the arrays
{ "$unwind": "$likes" },
{ "$unwind": "$mylikes" },

// Work out where those likes are the same. Intersection.
{ "$project": {
"name": 1,
"likes": 1,
"match": { "$eq": [ "$likes", "$mylikes" ] }
}},

// Filter the results that did not match
{ "$match": { "match": true } },

// Group back the array of likes
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"likes": { "$push": "$likes" }
}}
])

最后一个删除了“Jane”的条目,因为没有匹配的喜欢,但或多或​​少是期望的结果。

如果您对此感兴趣,那么您应该看看 this post其中更详细地介绍了将聚合与 meteor 一起使用。但通用方法在这里,与在客户端处理结果以找到集合的交集相比,它应该提供更快捷、更优雅的解决方案。

关于mongodb - 如何获取 Meteor 中数组交集的 react 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com