这里的想法是返回用户关注者的一系列文档,如果该用户是该关注者的朋友,则返回该信息。
到目前为止,我有:
db.getCollection('users').aggregate([
{ $match: { _id: ObjectId("588877d82523b4395039910a") } },
{ $lookup: {
from: 'users',
localField: 'followers',
foreignField: '_id',
as: 's_followers'
}
},
{
$project: {
"s_followers._id": 1,
"s_followers.isFriend": {
$in: ["s_followers.id",
{ $setIntersection: ["$friends", "$followers"] }
]}
}
}
])
但是$ in运算符中使用的“s_followers.id”似乎没有从关注者那里检索_id信息,所以它总是返回false。
当我直接使用ObjectId时,我得到了我想要的结果:
"s_followers.isFriend": {
$in: [ObjectId("588877d82523b4395039910a"),
{ $setIntersection: ["$friends", "$followers"] }
]}
但我真的需要这个ID作为跟随者_id的引用。
预期结果如下:
{
"_id" : ObjectId("588877d82523b4395039910a"),
"s_followers" : [
{
"_id" : ObjectId("5888687e56be8f172844d96f"),
"isFriend" : true
},
{
"_id" : ObjectId("5888ca27d79b8b03949a6e8c"),
"isFriend" : false
}
]
}
感谢您的帮助!
UPD:一种不同的方法(可能更简单),就是使用我拥有的用户ID($ match上使用的用户ID),但我还是需要获取参考跟随者的追随者阵列
db.getCollection('users').aggregate([
{ $match: { _id: ObjectId("588877d82523b4395039910a") } },
{ $lookup: {
from: 'users',
localField: 'followers',
foreignField: '_id',
as: 's_followers'
}
}, {
$project: {
"firstName": 1,
"s_followers._id": 1,
"s_followers.firstName": 1,
"s_followers.followers": 1,
"s_followers.isFriend": { $in: [ObjectId("588877d82523b4395039910a"), "$s_followers.followers"] }
}
}
])
UPD2:用户数据结构(重要的部分)
{
followers: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
friends: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
}
答案 0 :(得分:1)
FOR VERSION 3.4.0 +
好的,刚刚搞定,我会在这里发布代码和我对它的理解:
data=[] parent = driver.find_element_by_id("SearchResultsDetails-MainContent")
some_objects = parent.find_elements_by_xpath("//li[@class='row oneSearchResult']")
for ob in some_objects:
data.append(ob.get_attribute("id"))
我对它的理解:
答案 1 :(得分:0)
在我的示例中,使用followers friends
列表检查当前user
是朋友。如果想要在{$arrayElemAt:["$s_followers.friends",0]}
中找到followers
那么可以使用"$s_followers.followers"
你可以尝试一下。
db.getCollection('user').aggregate([
{ $match: { _id: ObjectId("5714d190e6128b7e7f8d9008") } },
{$unwind:"$followers"},
{ $lookup: {
from: 'user',
localField: 'followers',
foreignField: '_id',
as: 's_followers'
}
},
{$project:{
firstName:1,
s_followers:{$arrayElemAt:["$s_followers",0]},
isFriend:{$cond:[{
$anyElementTrue:{
$map: {"input": {$arrayElemAt:["$s_followers.friends",0]},
"as": "el",
"in": { "$eq": [ "$$el", "$_id" ] }
}
}
},true,false]}
}
},
{$group:{
_id:"$_id",
s_followers:{$push:{_id:"$s_followers._id",isFriend:"$isFriend"}}
}
}
])