通过mongo中的填充字段查询[重复]
Posted
技术标签:
【中文标题】通过mongo中的填充字段查询[重复]【英文标题】:query through populated field in mongo [duplicate] 【发布时间】:2018-10-01 16:50:00 【问题描述】:我想通过填充字段进行查询。在这种情况下,填充的字段是评论。因此,如果我的搜索查询与评论表描述字段匹配......然后返回那本书。评论是一个对象数组,描述是其中的一个键。
我尝试在查询对象中使用reviews[0].description,但没有成功。
getBookInfo: (req, res) =>
const search = req.params.search;
const query = $or: [ title: $regex: search, $options: 'i' ] ;
Books.find(query).populate('reviews').exec(function(err, books)
if (err)
return err;
return books;
);
【问题讨论】:
所以您搜索的是评论而不是书籍。我说的对吗? @num8er 是的,我想同时搜索。所以书籍字段将是标题,然后还从评论中搜索描述 所以你有一个以title
和description
为属性的图书模式,对吗?
@GeorgeBailey 是的,这是正确的。在书籍架构中......我有标题、描述和评论(它是对评论表的引用)。在评论表中,我也有标题和描述
是的,这是最常用和欣赏的。我完全同意
【参考方案1】:
您想要搜索与您的查询匹配的书籍并填充评论。
所以 documentation 你有权使用 match
来表示人口。
给你:
getBookInfo: async (req, res) =>
try
const search = req.params.search;
// query for books matching by condition
const query =
$or: [
title: $regex: search, $options: 'i' ,
description: $regex: search, $options: 'i' ,
]
;
// include reviews matching by conditions
const include =
path: 'reviews',
match:
description:
$regex: search,
$options: 'i'
,
options: limit: 5
;
const books = await Books
.find(query)
.populate(include)
.lean();
res.status(200).send(books);
catch (error)
res.status(500).send(error);
;
更新:
据我了解,您想同时查询评论和书籍。
-
在 Review 模型中有
book
字段,它将保留书籍 _id
、title
和 description
。
当用户添加评论时,只需将该图书数据放入评论文档中即可。
直接查询评论集合。
【讨论】:
没用 :( @HeelMega 我在您的问题下添加了一些评论。你必须建立一些索引集合。 Mongodb 不允许这样复杂的查询。 是的,我认为这是要走的路 @HeelMega 或者如果您在路径的开头,请切换到 mysql、Postgres 并作为 ORM 使用 Sequelize 现在...我得到了一个大数组中所有评论的_id。我如何将它们放在我的查询中,因为它是一个数组而不仅仅是一个字符串以上是关于通过mongo中的填充字段查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Mongo 在 Meteor 应用程序中的 _id_ 字段上给出重复键错误
无法通过 Mongo(mongoose)中的点符号搜索子文档 [重复]