如何在MongoDB / Node JS中查找和编辑文档中数组元素的属性?

时间:2016-11-11 09:28:03

标签: javascript node.js mongodb

我有一个使用本机MongoDB驱动程序的MEAN堆栈应用程序。

登录用户的用户ID由Passport JS通过req.user.id提供。让我们说req.user.id =" 10154053694878424"。

我无法弄清楚如何在属于用户的数据库中查找文档,在数组中查找元素并更新该元素。数据库中的文档如下所示:

^/content/(?:[^/]*/){3}(?![^/]*/(?:sample1|sample2))[^/]*

我有一条路线:

{
  "id": "10154053694878424", 
  "name: "John Doe",
  "city: "Amsterdam",
  "books": [{},{},{}],
  "requests": [
    {"title": "Harry Potter", "author": "JK Rowling", "status": "pending"},
    {"title": "Lord of the Rings", "author": "JR Tolkien", "status": "pending"}
  ] 
}

如何使用用户ID在数据库中查找文档,在books数组中找到匹配的title元素并更改books数组的status属性?我可以找到用户,返回文档,编辑它然后使用updateOne替换数据库中的文档。但是使用findAndModify可能有更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

MongoDB Positional

// find data where id == req.user.id and requests.title = harry potter
db.collection
.update({ 
    id: req.user.id, 
    "requests.title": "Harry Potter" 
}, { 
    $set: { 
        "requests.$.status": "accepted" 
    } 
});