gpt4 book ai didi

python - 如何编写数组值的匹配条件?

转载 作者:行者123 更新时间:2023-12-01 07:15:29 29 4
gpt4 key购买 nike

我已将值存储在多个变量中。以下是输入变量。

uid = Objectid("5d518caed55bc00001d235c1")
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']

这些值会动态更改。下面是我的代码:

user_posts.aggregate([{
"$match": {
"$or": [{ "userid": uid }, {
"userid": {
"$eq":
disuid
}
}]
}
},
{
"$lookup": {
"from": "user_profile",
"localField": "userid",
"foreignField": "_id",
"as": "details"
}
},
{ "$unwind": "$details" },
{
"$sort": { "created_ts": -1 }
},
{
"$project": {
"userid": 1,
"type": 1,
"location": 1,
"caption": 1
}
}
])

在上面的代码中,我仅获得匹配的 uid 值,但我还需要与 disuid 匹配的文档。

userid字段中,我们仅存储了“Objectid”值。所以我关心的是如何将“Objectid”添加到“disuid”变量以及如何使用 userid 字段为两个变量编写匹配条件?

最佳答案

好的,你可以通过两种方式做到这一点:

正如你所见:

uid = Objectid("5d518caed55bc00001d235c1")
disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']

您需要使用 python 代码将字符串列表转换为 ObjectId 列表:

from bson.objectid import ObjectId


disuid = ['5d76b2c847c8d3000184a090', '5d7abb7a97a90b0001326010']
my_list = []


for i in disuid:
my_list.append(ObjectId(i))

它看起来像这样:[ObjectId('5d76b2c847c8d3000184a090'),ObjectId('5d7abb7a97a90b0001326010')]

然后通过使用新列表my_list,您可以执行如下查询:

user_posts.aggregate([{"$match" : { "$or" : [{ "userid" : uid }, { "userid" : { "$in" : my_list }}]}}])

或者以我不喜欢的另一种方式,因为与数据库中所有文档的 userid 字段的 n 个值相比,仅转换代码中的几个值更容易,但以防万一您希望使用数据库查询来完成:

user_posts.aggregate([{$addFields : {userStrings : {$toString: '$userid'}}},{"$match" : { "$or" : [{ "userid" : uid }, { "userStrings" : { "$in" : disuid }}]}}])

注意:如果您没有 bson 软件包,则需要通过执行类似 pip install bson

的操作来安装它

关于python - 如何编写数组值的匹配条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996739/

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