按数组内对象的两个值过滤 mongoengine/mongodb-query 中的项目
Filter items in mongoengine/mongodb-query by two value of an object inside an array
我想筛选一个包含对象数组的 JSON 对象(在集合中,称为 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 中这样,我得到了上述值,但我应该得到 none.
id = "5da9773c0e46aa734e4c3683"
chats = Chat.objects.filter(members__user=id, members__leaved=False)
如果有人知道如何在 MongoDBjs 中做到这一点,那太好了,我可以自己调整它以适应 mongoengine
。 :) 这就是我标记两者的原因
看来我找到答案了,多亏自己睡了一觉 x(
id = ObjectId("5dceca90ab5d5c16a7401df0")
db.getCollection('chat').find({
"$or": [
{
"members": {
"$elemMatch": {
"leaved": false,
"user": id
}
}
},
{
"creator": id,
"closed": false
}
]
})
我会再测试一下,然后针对 mongoengine
版本编辑此 post。之后我将其标记为已解决,如果没有人比我快的话:)
编辑:
真快...:[=13=]
chats = Chat.objects.filter(
Q(members__match={"leaved": False, "user": id}) | Q(creator=id, closed=False)
)
我想筛选一个包含对象数组的 JSON 对象(在集合中,称为 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 中这样,我得到了上述值,但我应该得到 none.
id = "5da9773c0e46aa734e4c3683"
chats = Chat.objects.filter(members__user=id, members__leaved=False)
如果有人知道如何在 MongoDBjs 中做到这一点,那太好了,我可以自己调整它以适应 mongoengine
。 :) 这就是我标记两者的原因
看来我找到答案了,多亏自己睡了一觉 x(
id = ObjectId("5dceca90ab5d5c16a7401df0")
db.getCollection('chat').find({
"$or": [
{
"members": {
"$elemMatch": {
"leaved": false,
"user": id
}
}
},
{
"creator": id,
"closed": false
}
]
})
我会再测试一下,然后针对 mongoengine
版本编辑此 post。之后我将其标记为已解决,如果没有人比我快的话:)
编辑:
真快...:[=13=]
chats = Chat.objects.filter(
Q(members__match={"leaved": False, "user": id}) | Q(creator=id, closed=False)
)