gpt4 book ai didi

mongodb - 通过 mongoDB 从 $lookup 引用字段

转载 作者:行者123 更新时间:2023-12-02 21:38:05 28 4
gpt4 key购买 nike

我目前正在使用 mongoDB。我有一个名为 Users 的集合,其中包含以下文档:

{
_id: "5d93f338e602a10a38ad3588",
userID: "1",
email: "test@test.com",
password: "password",
firstName: "Tom",
lastName: "Bombadil"
}

我还有一个名为 Posts 的集合。带有文档:

{
_id: "5d93fddce602a10a38ad358a",
postID: "1",
userID: "1",
postContent: "hello world"
}

我可以通过用户的以下 $lookup“加入”这两个:

{
from: 'Posts',
localField: 'userID',
foreignField: 'useriD',
as: 'usersPosts'
}

如何编写查询来获取所述帖子的“postContent”?大致如下:

db.Users.find($lookup :     {
from: 'Posts',
localField: 'userID',
foreignField: 'useriD',
as: 'usersPosts'
} : userPosts[0]

最佳答案

您可以通过以下方式获取每个用户的postContent列表;

db.Users.aggregate([
{
$lookup: {
from: "Posts",
localField: "userID",
foreignField: "userID",
as: "usersPosts"
}
},
{
$addFields: {
userPostContents: "$usersPosts.postContent"
}
},
{
$project: {
userID: 1,
userPostContents: 1
}
}
])

在执行$lookup之后,您已经知道,我们可以仅使用userPosts数组中的postContent字段创建一个数组使用addFields 。将对象数组转换为字符串数组。

查看 mongoplayground 上的代码

这将为您提供每个用户postContent列表;

[
{
"_id": "5d93f338e602a10a38ad3588",
"userID": "1",
"userPostContents": [
"hello world"
]
}
]
<小时/>

或者,如果您只想获取每个用户第一个postpostContent,则更改您的$project 阶段到;

{
$project: {
userID: 1,
userPostContent: {
$arrayElemAt: [
"$userPostContents",
0
]
}
}
}

它只会获取第一个postContent,例如;

[
{
"_id": "5d93f338e602a10a38ad3588",
"userID": "1",
"userPostContent": "hello world"
}
]

检查mongoplayground还有

关于mongodb - 通过 mongoDB 从 $lookup 引用字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194215/

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