如何在猫鼬中动态地将值推入对象的属性?
Posted
技术标签:
【中文标题】如何在猫鼬中动态地将值推入对象的属性?【英文标题】:how to push value in to object's property dynamically in mongoose? 【发布时间】:2020-11-01 20:21:17 【问题描述】:我想根据使用 mongoose 从前端收到的属性值将值推送到数组中。
架构:
authencity:
fake: [],
notSure: [],
authentic: [],
现在我想根据从前端接收到的属性值将值推送到数组中
const result = await News.findOneAndUpdate( name: newsName , $push: `authencity[$authencityType]`: email );
authencityType 可以是假的、notSure 和真实的,基于此值我想将该值插入到相应的数组中。
样本数据:
Sample Document :
"_id":
"$oid": "5f0af1e09a724b06c86bfaec"
,
"authencity":
"fake": [],
"notSure": [],
"authentic": []
,
"name": "Rajasthan deputy CM Sachin Pilot\u2019s supporters come to Gurugram resort, call police summon a joke",
"description": "",
"url": "https://news.google.com/__i/rss/rd/articles/CBMiqwFodHRwczovL3d3dy5oaW5kdXN0YW50aW1lcy5jb20vaW5kaWEtbmV3cy9yYWphc3RoYW4tZGVwdXR5LWNtLXNhY2hpbi1waWxvdC1zLXN1cHBvcnRlcnMtY29tZS10by1ndXJ1Z3JhbS1yZXNvcnQtY2FsbC1wb2xpY2Utc3VtbW9uLWEtam9rZS9zdG9yeS1ZQ1BQVDFlandtb1RoQXJaRXVabmNOLmh0bWzSAa0BaHR0cHM6Ly9tLmhpbmR1c3RhbnRpbWVzLmNvbS9pbmRpYS1uZXdzL3JhamFzdGhhbi1kZXB1dHktY20tc2FjaGluLXBpbG90LXMtc3VwcG9ydGVycy1jb21lLXRvLWd1cnVncmFtLXJlc29ydC1jYWxsLXBvbGljZS1zdW1tb24tYS1qb2tlL3N0b3J5LVlDUFBUMWVqd21vVGhBclpFdVpuY05fYW1wLmh0bWw?oc=5",
"category": "general",
"language": "en",
"country": "in",
"__v": 0
收到的数据:电子邮件:abcd@gmail.com authencityType 可能是假的或不确定的或真实的
我想根据收到的 authencityType 推送特定数组中的值
【问题讨论】:
【参考方案1】:您需要使用the dot notation 而不是方括号来定义您的路径:
`authencity.$authencityType`
例如authenticity.fake
尝试:
const result = await News.findOneAndUpdate( name: newsName , $push: `authencity.$authencityType`: email , new: true );
还要注意,在 mongoose 的 findOneAndUpdate 版本中,您需要传递 new: true 参数才能返回修改后的文档
【讨论】:
@AdityaVyas 你能展示一个示例文档和你要更新的数据吗? @AdityaVyas 您正在基于newsName
构建查询,但您说有效负载仅包含email
。对吗?
newName
我从参数中获取。
您可以通过newName
找到您的文档吗? result
的值是多少?
是的,它是完整的文档【参考方案2】:
const newColumn = `authencity.$authencityType`;
const result = await News.findOneAndUpdate( name: newsName , $push: [newColumn]: email , new: true );
在这里,我创建了一个动态字符串来使用模板文字构造一个列名,然后用 [] 将它括起来,所以 mongo 会认为这是一个列名
【讨论】:
请考虑解释您的代码以及它将如何提供帮助,以便其他人可以从中受益。以上是关于如何在猫鼬中动态地将值推入对象的属性?的主要内容,如果未能解决你的问题,请参考以下文章