mongodb - 如何在 mongodb 中使用查找和 $push
问题描述
我在玩 Mongodb,想要一个使用查找和 $push 或 $addToSet 的查询
看到这个 https://mongoplayground.net/p/4hSPKW_bCdM
我怎样才能使这个查询正确。我们需要在这里循环吗?
应该返回
{
"response": [
{
"_id": "5fcdcc14da26c80a6de06754",
"first_name": "James",
"last_name": "Hales",
"username": "jim",
"timestamp": 1607322644202,
"userData": [
{
"_id": "6011021851781d3d9841e09d",
"user_id": "5fcdcc14da26c80a6de06754",
"photo": [
{
"_id": "6011021851781d3d9841e09e",
"url": "http://localhost:3000/files/ou93r0cfjde0cat.jpg",
"width": 250,
"height": 500,
"preview": "skjdfbsdjvns;svnsdvisdvnvsdjvnsdivsdkvsdivsdjvnsdjvsdvsdvgjsvnsvhi"
}
],
"status": "Active",
"timestamp": 1611727384083,
"expire_at": "2021-01-27T06:03:04.083Z"
},
{
"_id": "6011021851781d3d9841e09d",
"user_id": "5fcdcc14da26c80a6de06754",
"photo": [
{
"_id": "6011021851781d3d9841e09e",
"url": "http://localhost:3000/files/ou93r0cfjee0bat.jpg",
"width": 250,
"height": 500,
"preview": "skjdfbsdjvns;svnsdvisdvnvsdjvnsdivsdkvsdivsdjvnsdjvsdvsdvgjsvnsvhi"
}
],
"status": "Active",
"timestamp": 1611727384083,
"expire_at": "2021-01-27T06:03:04.083Z"
}
]
}
]
}
预先感谢
解决方案
- (可选)
$match
数组中的用户 ID $lookup
带站点,_id
作为本地域和user_id
外域传递- (可选)
$match
如果您想删除空userData
用户的文档
db.users.aggregate([
// optional match stage
{
$match: {
_id: { $in: [ObjectId("5fcdcc14da26c80a6de06754"), ObjectId("5fcdd0075dc42a0d5c7ec813")] }
}
}
{
$lookup: {
from: "site",
localField: "_id",
foreignField: "user_id",
as: "userData"
}
},
// optional match stage
{ $match: { userData: { $ne: [] } } }
])