mongodb - Node mongoose 嵌入文档数组

标签 mongodb mongoose

我这里有我的示例 userSchema:

{
    "_id": objectId("6092076ba811e50b565497ec"),
    "username": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbafbea8af9bbcb6bab2b7f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>",
    "address_book": [{
        "_id": objectId("6092b1120f7e370b954a2708"),
        "address": "address1",
        "address2": "address2",
    }, {
        "_id": objectId("6093edcb88796b0a5eba19a3"),
        "address": "test1",
       "address2": "test2",
    }]
}

我可以通过以下方式找到用户吗 objectId("6092076ba811e50b565497ec")address_book._id object("6093edcb88796b0a5eba19a3")

它只返回我选择的address_book?我的预期返回数据应该是这样的

{
    "_id": objectId("6092076ba811e50b565497ec"),
    "username": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="166273656256717b777f7a3875797b" rel="noreferrer noopener nofollow">[email protected]</a>",
    "address_book": {
        "_id": objectId("6093edcb88796b0a5eba19a3"),
        "address": "test1",
       "address2": "test2",
    }
}

这是我的示例函数

let user = [];
await User.findOne({
   _id: id,
   "address_book._id": address_id,
 })
.then((result) => {
   console.log(result);
   user = result;
 })
 .catch((err) => console.log(err));
 return user;

有了这个我就得到了所有的地址簿

还有address_book._id有updateOrCreate函数吗?

提前谢谢您。

最佳答案

从 MongoDB 4.4 开始,您可以在 find 方法中使用聚合运算符,

  • $filter 迭代 address_book 数组的循环并匹配 _id 条件
  • $first 从上面过滤结果中选择第一个元素
await User.findOne({
  _id: id,
  "address_book._id": address_id
},
{
  username: 1,
  address_book: {
    $first: {
      $filter: {
        input: "$address_book",
        cond: { $eq: ["$$this._id", mongoose.Types.ObjectId(address_id)] }
      }
    }
  }
})

Playground

关于mongodb - Node mongoose 嵌入文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67419919/

相关文章:

node.js - mongodb 中不区分大小写的 find() 函数与 mongoose

mongodb - 如何使用 Node.js 从 Mongodb 中提取 NumberLong 数据?

node.js - 回调未在nodejs中获取记录

mongodb - 如何按mongo中的任意列表对对象数组进行排序

javascript - 在 NodeJS 中获取数组值时出现问题

node.js - Mongoose 对聚合结果进行排序

ruby-on-rails - 如果我的模型不代表不同的想法,而是代表具有重叠字段的不同类型,我应该在应用程序中使用什么数据库?

javascript - NodeJS + Mongoose 等待子查询

javascript - Node.js/Express 和 Mongoose : Make an "observable" mongodb Connection with automatic pull on new Data?

mongodb - 有没有办法将整个mongodb集合转储到oplog中?