Javascript 通过mongo中填充的字段进行查询
我想通过填充的字段进行查询。在这种情况下,填充的字段是reviews。因此,如果我搜索的查询与reviews tables描述字段匹配。。。然后把那本书还给我。评论是一个对象数组,描述是其中的关键之一 我已尝试在查询对象中使用评论[0]。说明,但无效Javascript 通过mongo中填充的字段进行查询,javascript,arrays,node.js,mongodb,mongoose,Javascript,Arrays,Node.js,Mongodb,Mongoose,我想通过填充的字段进行查询。在这种情况下,填充的字段是reviews。因此,如果我搜索的查询与reviews tables描述字段匹配。。。然后把那本书还给我。评论是一个对象数组,描述是其中的关键之一 我已尝试在查询对象中使用评论[0]。说明,但无效 getBookInfo: (req, res) => { const search = req.params.search; const query = { $or: [{ title: { $regex: s
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;
});
}
您希望搜索与您的查询匹配的书籍并填充评论 因此,您有权对人口使用
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);
}
};
更新:
据我所知,您想查询评论和书籍
book
字段,该字段将保留book\u id
、标题
和说明
所以你是在评论中而不是在书中搜索。我说的对吗?@num8er是的,我想在这两个方面都搜索。所以books字段应该是title,然后还可以从reviews中搜索描述,所以您有一个图书模式,其中
title
和description
作为属性,对吗?@GeorgeBailey是的,这是正确的。在书中。。。我有标题、描述和评论(参考评论表)。在评论表中,我也有标题和描述。是的,这是最常用和最受欢迎的。我完全同意它不起作用:(@HeelMega我在你的问题下添加了一些评论。你必须建立一些索引集合。Mongodb不允许如此复杂的查询。是的,我认为这是解决问题的方法go@HeelMega或者,如果你在路径的开始,切换到MySQL、Postgres和作为ORM使用SequelizeNow…我得到了一个大数组中所有评论的id。我如何放置因为它是一个数组,而不仅仅是一个字符串