在Mongoose中进行双重查询(在查找内查找)

时间:2017-07-13 12:08:00

标签: node.js mongodb mongoose

我想查询文档。这是它的架构

{
_id,
notes: [{_id: 243234,
text: "hey"},
_id, 421123,
text: "hi"}
]
}

我想首先通过_id查找文档,然后在notes [1]上找到'text'的值。

使用这个,我可以找到实际文档,但是如何找到notes数组中的对象?我必须找到并更新注释中的“文本”。

socket.on("individualnote edit", function(data) {
    rooms.find({ _id: data.roomId}, function( err, doc) {
      if (err) {
            console.log("Something wrong when updating data!");
      }
      console.log(doc);
    });

1 个答案:

答案 0 :(得分:1)

您可以使用positional $运算符来查找和更新子文档数组中的元素。

  

位置$运算符标识要更新的数组中的元素,而不显式指定元素在数组中的位置。

rooms.findOneAndUpdate({
  _id: _id,
  'notes.text': 'hey'
}, {
  '$set': {
    'notes.$.text': 'new text'
  }
}).then(() => {
  console.log('Success');
}).catch((err) => {
  console.log('err', err.stack);
});