【问题标题】:Insert document to collection using data from an "inner select" from another collection使用来自另一个集合的“内部选择”的数据将文档插入集合
【发布时间】:2021-04-19 09:43:27
【问题描述】:

我有 2 个 mongo 集合:adminslogs

“管理员”集合文档如下所示:

{
   _id: ObjectId("123456"),
   name: "John Doe",
   age: 33
}

我想通过一个查询向“日志”集合中插入一个新文档,如下所示:

{
   _id: ObjectId("778899"),
   action: "did something",
   adminUserId: "123456"   // just a plain string value, not ObjectId
}

所以我真正要问的是如何插入文档,其中字段值等于“内部选择语句”值, 即-

adminUserId = ([select one from collection 'admins' where name="John Doe"]._id.toString())

有什么方法可以在一个 mongo 操作中完成所有操作?我在 node.js 中

【问题讨论】:

  • 它需要 2 次查询,第一次从管理员那里找到,第二次添加日志。
  • 是的,已经这样做了。我很好奇这种操作是否可以“折叠”到一个查询中,而且——如果这种查询比 1.fetch->2.insert 的简单方法更有效
  • 我不认为有任何折叠查询可以做到这一点,你真的需要改变模式设计从另一个集合查询数据并插入另一个集合是不好的,或者你为什么不获取_id而不是name,可以保存一个查询。

标签: node.js mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

使用聚合管道检索您要插入的数据,然后根据需要对其进行处理,然后使用 $merge 阶段将其插入现有集合中。

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 2016-09-22
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多