mongodb 如何把从一个集合中的查询结果 插入到一个新的集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb 如何把从一个集合中的查询结果 插入到一个新的集合相关的知识,希望对你有一定的参考价值。

把从集合A 从的查询结果,插入到集合B,mongo 语句该怎么写?

参考技术A 可以直接将两个集合查出来传到View里啊
collectionA.find().toArray(function(errA, recordsA)
collectionB.find().toArray(function(errB, recordsB)
res.render("view",
collectionA: recordsA,
collectionB: recordsB
);
);
);
参考技术B 一个新的集合 50

如何在聚合阶段之后使用条件限制 MongoDB 结果

【中文标题】如何在聚合阶段之后使用条件限制 MongoDB 结果【英文标题】:How to limit MongoDB results with condition after the aggregation stage 【发布时间】:2021-11-04 08:11:28 【问题描述】:

我想在聚合阶段之后根据条件获取结果。我的代码给了我一个包含 4 个结果而不是 3 个的数组。 逻辑是用户滑动并将数据存储在一个集合中。集合存储第一次滑动,如果其他用户滑动现有条目,则更新集合文档而不是新插入,这取决于谁先滑动,因此 $or 查询。这工作正常,直到我在用户集合上将现有用户的连接状态更改为 false。结果是一个长度为 4 而不是 3 的数组。额外的数组是从 $or 查询创建的,并且只有 user_two。

滑动收藏 _id(ObjectID) - user_one(string) - user_two(string) - status_one(number) - status_two(number)

用户收藏 _id(ObjectID) - user_name(string) - hookups(boolean)

const fetchHookups = (req, res, next) => 
var query = 
        $or: [
              user_one: ObjectId(req.body._id),
              user_two: ObjectId(req.body._id) ,
            ]
        
    
Swipe.aggregate([
    $match: query
    ,
    
      $lookup: 
        from: 'users',
        let:  user_one: '$user_one', hookupstatus: true ,
        pipeline: [
        $match: 
        $expr: 
            $and: [
                 $eq: ["$_id", '$$user_one'] ,
                 $eq: ["$hookups", '$$hookupstatus'] ,
                ],
            
        
        ],
        as: "userone"
        
    ,
    
      $unwind: 
        path: "$userone",
        preserveNullAndEmptyArrays: true,
        ,
    ,
    
      $lookup: 
        from: 'users',
        let:  user_two: '$user_two', hookupstatus: true ,
        pipeline: [
        $match: 
        $expr: 
            $and: [
                 $eq: ["$_id", '$$user_two'] ,
                 $eq: ["$hookups", '$$hookupstatus'] ,
                ],
            
        
        ],
        as: "usertwo"
        
    ,
    
      $unwind: 
        path: "$usertwo",
        preserveNullAndEmptyArrays: true,
        ,
    ,

    
        $sort: 
            _id: -1
            
        
    ]).exec(function(error, response) 
        if (error) 
            console.log(error)
             else 
                res.json(response)
                
    )

【问题讨论】:

【参考方案1】:

感谢@Thomas,我想通了,方法如下:


 $redact: 
  $cond: [
    $eq: ["$userone.hookups", true],
    $eq: ["$usertwo.hookups", true],
    ,
    "$$KEEP",
    "$$PRUNE"
    ]
   
,

【讨论】:

【参考方案2】:

我没有尝试过,但 $redact 运算符听起来就像你想要的那样。

这是一个相当古老但写得很好的例子: Find documents whose array field contains at least n elements of a given array

【讨论】:

以上是关于mongodb 如何把从一个集合中的查询结果 插入到一个新的集合的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 没有则插入,有则更新其中某列

MongoDB 快速入门

运行MongoDB查询以更新循环中的序列字段

mongodb怎么插入多个文档

PHP中的MongoDB - 如何将项目插入集合中的数组?

mongodb