mongoose - 在对象数组中填充后查找
问题描述
我想根据它的“guess.body”“找到”以下项目:
{
"guess": [
{
"body": "findme",
}
],
"_id": "608ee73b18a16e39e809203f"
}
此项目位于名为“ask”的集合中,具有以下模型:
const askSchema = new Schema ({
guess: [{type:Schema.Types.ObjectId, ref:'guess'}],
})
为了做到这一点,我尝试了 2 个查询:
第一个:
const askByGuess = await ask.find().populate("guess").find({"guess.body":"findme"}) res.status(200).json(askByGuess)
返回一个空数组
第二个(基于这个答案:Find after populate mongoose)
const askByGuess = await ask.find().populate({path:"guess", match{body:"findme"}}).exec(function(err, ask) {ask = ask.filter(function(ask) {return ask.guess})}) res.status(200).json(askByGuess)
返回“1”。
有人可以告诉我我做错了什么吗?
谢谢!
解决方案
我倾向于同意Find after populate mongoose中提出的解决方案,但是,如果对于您的特定用例,您可以通过简单的聚合管道获得:
$unwind
:填充猜测字段。
$lookup
: 执行左外连接。
$match
: 最终匹配您的搜索词。
db.ask.aggregate({
$unwind: "$guess"
},
{
$lookup: {
from: "guess",
localField: "guess",
foreignField: "_id",
as: "guess"
}
},
{
$match: {
"guess.body": "test"
}
})
推荐阅读
- javascript - 响应不返回数据
- laravel - 将 post httprequest 发送到另一台服务器
- arrays - 将字符串转换为对象数组 React
- regex - Splunk 中的正则表达式运算符无法匹配结果
- python - 有没有办法在 for 循环中嵌套迭代器
- javascript - 如何在 TS 中访问场景、渲染器、相机对象 Forge viewer v6
- powershell-2.0 - 通过匹配字符串查找文件内容并输出在 PowerShell 2.0 中找不到的内容
- java - 无法将名称 [org.hibernate.spatial.dialect.postgis.PostgisDialect] 解析为策略 [org.hibernate.dialect.Dialect]
- c# - c# 从 Handler 类中的流中读取 .csv
- javascript - 面板使用 jQuery 中的 mouseover、mouseout 事件