gpt4 book ai didi

node.js - Mongoose 查询子文档

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:10 25 4
gpt4 key购买 nike

我有以下方案;它是一个对话方案,其中包含用户名和启用或禁用状态的子文档结构;

conversation = {title: "title", 
users: [{"name: "a", "enabled": true}, {"name: "b", "enabled": false}]}

我想选择所有启用状态设置为 true 的用户。我发现投影中的 $elemMatch 就是这样做的,但只返回第一个元素...将 $elemMatch 放在查询部分中不会执行任何操作...

感谢任何帮助

最佳答案

假设mongo结构如下

> db.conversation.find().pretty()
{
"_id" : ObjectId("55337db16f20d74ec08c33b1"),
"title" : "title",
"users" : [
{
"name" : "a",
"enabled" : true
},
{
"name" : "b",
"enabled" : false
}
]
}
{
"_id" : ObjectId("553380ac6f20d74ec08c33b2"),
"users" : [
{
"name" : "a",
"enabled" : false
},
{
"name" : "b",
"enabled" : false
}
],
"title" : "Abc"
}

如果您希望返回“enabled”字段设置为“true”的用户的条目,则可以执行以下操作

> db.conversation.find({users: {$elemMatch: { "name":{$exists: true} ,"enabled":true}  }}).pretty()
{
"_id" : ObjectId("55337db16f20d74ec08c33b1"),
"title" : "title",
"users" : [
{
"name" : "a",
"enabled" : true
},
{
"name" : "b",
"enabled" : false
}
]
}

但我不喜欢您使用的数据结构。

假设(假设是这种情况)您必须跟踪对话。以下内容对您有用吗?

conversation = {title: "title", users: ["a", "b"]}

假设您的情况中“a”、“b”是唯一标识,否则我建议您将 ID 保留在此处。

conversation = {title: "title", users: [3434, 984]}

有另一个集合来存储您的用户数据(以下是典型条目)。

{"user_id": 3434, "enabled": true}
...

在这种情况下,您可以运行聚合或其他操作,从对话集合中选择用户列表,以返回所有用户的唯一列表。然后,您可以查询用户集合中的该列表,以查看哪些实际上已启用/禁用。

现在,假设我错了,这个启用禁用实际上指示在特定对话中启用/禁用了哪个用户。那么我想说你的结构应该是。

conversation = {title: "title", users: [232, 3453], disabled: [232]}

希望这有帮助!

关于node.js - Mongoose 查询子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29728286/

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