Python 按数组中对象的两个值筛选mongoengine/mongodb查询中的项
我想过滤一个JSON对象(在集合中,称为Python 按数组中对象的两个值筛选mongoengine/mongodb查询中的项,python,mongodb,mongodb-query,mongoengine,Python,Mongodb,Mongodb Query,Mongoengine,我想过滤一个JSON对象(在集合中,称为chat),它包含一个对象数组。该对象包含两个值,leaved和user。我想过滤这两个值,所以我只获取两个值都匹配的集合实体 示例chat条目: { "_id" : ObjectId("5de8529e104e1be853907372"), "created_at" : ISODate("2019-12-05T00:42:35.000Z"), "closed" : false, "type" : "group",
chat
),它包含一个对象数组。该对象包含两个值,leaved
和user
。我想过滤这两个值,所以我只获取两个值都匹配的集合实体
示例chat
条目:
{
"_id" : ObjectId("5de8529e104e1be853907372"),
"created_at" : ISODate("2019-12-05T00:42:35.000Z"),
"closed" : false,
"type" : "group",
"creator" : ObjectId("5da976ed390587ad999e0190"),
"messages" : [],
"members" : [
{
"leaved" : true,
"user" : ObjectId("5da9773c0e46aa734e4c3683")
},
{
"leaved" : false,
"user" : ObjectId("5dceca90ab5d5c16a7401df0")
}
]
}
当我现在尝试按leaved
和user
进行过滤时,就像在mongoengine中这样,我得到了上面的值,但我应该没有得到
id=“5da9773c0e46aa734e4c3683”
chats=Chat.objects.filter(members\uu user=id,members\uu leaved=False)
如果有人知道如何在MongoDBjs中实现这一点,那太好了,我可以自己将其应用到
mongoengine
:)这就是为什么我将两者都标记为似乎我已经找到了答案,感谢我自己得到了一些睡眠(
id=ObjectId(“5dceca90ab5d5c16a7401df0”)
db.getCollection('chat').find({
“$or”:[
{
“成员”:{
“$elemMatch”:{
“叶子”:假,
“用户”:id
}
}
},
{
“创建者”:id,
“关闭”:错误
}
]
})
我将对它进行更多的测试,并为mongoengine
版本编辑这篇文章。之后,如果没有人比我更快,我会将它标记为已解决:)
编辑:
太快了…:
chats=Chat.objects.filter(
Q(members_umatch={“leaved”:False,“user”:id})|Q(creator=id,closed=False)
)
您可以为ObjectID和ISODate添加导入吗?@SuppressionsLayer您是什么意思?这是mongodb json,不是python。我从收藏中复制的。我认为模式及其创建方式是不必要的。我希望类似于(members\uu user=id和members\uu leaved=False)
@pressurationslayer更新了我的问题,希望现在我需要的更清楚。