当前位置: 首页 > 知识库问答 >
问题:

如何在mongoose中不使用_id字段而是使用多个属性查找子文档

微生智刚
2023-03-14
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}
});
    null

我认为一种既长又耗时的方法是,首先找到带有给定url的提要,然后遍历所有子文档,以找到满足comment.url==req.body.url的文档,然后检查comment.username==req.user.username是否满足,如果满足,则更新comment对象。但是,我想一定有更简单的方法来做到这一点?我已经试过了-

db.feeds.update({"username":"harshitladdha93@gmail.com","comments.username":"harshitladdha3@gmail.com","comments.url":"test"},{$set:{"comments.$.text":"updated text 2"}})

可从http://www.tagwith.com/question_305575_how-to-find-and-update-subdocument-within-array-based-on-parent-property找到

但是,即使comments.urlcomments.username与其他子文档匹配,也会更新

我也试过

db.feeds.distinct("comments._id",{"comments.url":req.body.url})

查找与URL关联的文档的_ID,但它返回子文档中的所有_ID

共有1个答案

邓赤岩
2023-03-14

首先,在安全性方面,您不应该依赖于_id不被外界看到。这是一个非常糟糕的想法,原因有很多(主要是REST以及默认情况下所有查询都返回REST)。

现在,为了解决您的问题,您需要的是$elemmatch运算符。这表明您正在寻找数组中指定的子文档与多个查询匹配的内容。

例如。

db.feeds.update({
    "username":"harshitladdha93@gmail.com",
    comments: {
        $elemMatch: {
            username: "harshitladdha3@gmail.com",
            url: "test"
        }
    }
}, {$set: {"comments.$.text":"updated text 2"}})
 类似资料:
  • 我要使用集合中包含的日期字段查找文档 我想找到以'2018-01-03T11:00:'开头的所有文档 我想忽略Millesecobde和ISOtype..等的部分 无论第二个只是核实日期,小时和分钟。

  • 问题内容: 我正在尝试通过搜索“ _id”键在MongoDB中查找文档。我的文件看起来像这样- 我正在尝试将此文档搜索为- 但我得到以下错误- BasicDBObject的append方法支持(字符串键,值),如果我将“ _id”作为String传递给此方法,则不会匹配任何文档。 所以我的问题是如何传递“ _id”? 问题答案: 通过使用as作为查询来解决

  • 问题内容: 我正在尝试仅选择一个特定的领域 但是在我的json响应中,我也收到_id,我的文档架构只有两个字段,_id和name 为什么??? 问题答案: 除非您明确排除该字段,否则该字段始终存在。使用以下语法: 或通过对象显式:

  • 使用mongoose,我希望搜索具有特定属性的子文档并返回最近的一个。 给定一个特定的用户,我想搜索他们的s,查找他们的

  • 我对猫鼬的简单findById有麻烦。 已确认该项目存在于数据库中 与猫鼬 不会找到的。 我也试过转换成mongoId,仍然找不到(即使mongoose应该是为你做这件事的) 实际上,我正在尝试将它与typescript一起使用,因此使用了Await。 我也尝试了方法,仍然找不到。 是否有一些方法可以通过简单的字段来查找项目?_id必须在模式中吗?(文件说不是) 我可以通过模式中的其他值找到,只是

  • 我试图为一个web应用程序实现登录功能。我发现如果我使用“用户名”以外的字段,CakePHP不允许身份验证。您能解释一下我如何使用电子邮件字段而不是用户名字段进行身份验证吗。 我在下面分享用户表和验证码:: 用户表 认证码