【发布时间】:2020-06-09 19:42:06
【问题描述】:
下面是我的 TEST 表对象,其中包含类别 id 数组
{
"_id" : ObjectId("5ede075651957a5d540c7828"),
"Tags" : [
"demo",
"skype"
],
"CategoryID" : [
"5edb65a834c5cc735a76b8e4",
"5edb65ae34c5cc735a76b8e5"
],
"Title" : "demo 1",
"Description" : "<p>sdfsdf</p>",
"MetaTitle" : "asd",
"MetaDescription" : "asdas",
"MetaKeywords" : "asd",
"CanonicalUrl" : "asd",
"Index" : "No Index",
"ImagePath" : "",
"Position" : 0,
"AuthorID" : ObjectId("5ecbae9f1bfe823e940e12a0"),
"AuthorName" : "Admin",
"SearchTerm" : "",
"isPublish" : "0",
"isDeleted" : false,
"AddedOn" : ISODate("2020-06-08T09:39:34.007Z"),
"LastModifiedOn" : ISODate("2020-06-08T09:39:34.007Z"),
"__v" : 0
}
下面是我要从中获取类别名称的类别表
{
"_id" : ObjectId("5edb65a834c5cc735a76b8e4"),
"Name" : "Cat 1",
"ParentID" : "0",
"IsDeleted" : false,
"AddedOn" : ISODate("2020-06-06T09:45:12.632Z"),
"LastModifiedOn" : ISODate("2020-06-06T09:45:12.632Z"),
"__v" : 0
}
所以,我想从“TEST”表中获取记录,也想加入“Category”表以获取逗号分隔的Category name,它们是数组格式的“TEST”表.
我尝试了下面的查询,但它只适用于单个 记录在“CategoryID”数组中。如果我在 categoryID 数组中发送多条记录,那么它会多次给出不同类别的相同记录。
const getData = await TESTModel.aggregate([
{
$lookup: {
from: "Category", // other table name (Admin Table)
localField: "CategoryID", // name of blog table field
foreignField: "_id", // name of Admin table field
as: "testdata" // alias for userinfo table
},
},
{
$unwind: "$testdata",
$unwind: {
path: "$testdata",
preserveNullAndEmptyArrays: true
}
},
])
那么,如何在查询结果中获取逗号分隔的类别名称。
【问题讨论】:
-
谢谢,你能给我举个例子吗?
-
您可能想尝试说明您面临的问题。查找的管道允许使用
$match阶段,您可以在其中将字符串数组与 ObjectId 的字符串版本进行比较。提供的链接中有示例。看到这个帖子:Mongodb Join on _id field from String to ObjectId.
标签: mongodb mongoose mongodb-query