我有一个这样的示例模式 -
Comment.add({
text:String,
url:{type:String,unique:true},
username:String,
timestamp:{type:Date,default:Date}
});
Feed.add({
url:{type:String, unique:true },
username:String,
message:{type:String,required:'{PATH} is required!'},
comments:[Comment],
timestamp:{type:Date,default:Date}
});
现在,我不想将 _id 字段暴露给外界,这就是为什么我不会将它发送给任何地方的客户。现在,我的评论模式中有两个重要属性(用户名,url)我想要做的是更新满足的子文档的内容
- feed.url
- 评论网址
- 评论.用户名
如果comment.username
它与我的客户端值相同,req.user.username
则更新comment.text
其 url 由客户端在req.body.url
变量中提供的记录的属性。
我认为一种耗时的方法是首先找到具有给定 url 的提要,然后遍历所有子文档以找到满足的文档,comment.url==req.body.url
然后检查是否满足comment.username==req.user.username
,更新评论对象。但是,我认为必须有一种更简单的方法来做到这一点?我已经试过了——
db.feeds.update({"username":"harshitladdha93@gmail.com","comments.username":"harshitladdha3@gmail.com","comments.url":"test"},{$set:{"comments.$.text":"updated text 2"}})
但即使在comments.url
orcomments.username
匹配其他子文档时也会更新
我也试过
db.feeds.distinct("comments._id",{"comments.url":req.body.url})
查找与关联的文档的_id,url
但它返回_id
子文档中的所有