如何仅获取不包含在另一条记录的数组中的记录

Posted

技术标签:

【中文标题】如何仅获取不包含在另一条记录的数组中的记录【英文标题】:How to get only the records which are not contained in the array of another record 【发布时间】:2021-12-26 11:38:46 【问题描述】:

我正在尝试从 MongoDB 中检索未在另一个文档的数组字段中引用的所有记录。我有以下格式的数据:

[
   "domain": "foo.com", "altNames": [] ,
   "domain": "bar.com", "altNames": [] ,
   "domain": "zaz.com", "altNames": ["foo.com", "bar.com"],
   "domain": "baz.com", "altNames": ["boo.com"]
]

我想从这些数据中检索域为zaz.combaz.com 的记录,因为它们的domain 不在另一个记录altNames 数组中。

【问题讨论】:

【参考方案1】:

执行自查并检查结果数组是否为空

db.collection.aggregate([
  
    "$lookup": 
      "from": "collection",
      let: 
        d: "$domain"
      ,
      pipeline: [
        
          "$match": 
            $expr: 
              $in: [
                "$$d",
                "$altNames"
              ]
            
          
        ,
        
          $limit: 1
        
      ],
      "as": "altNamesLookup"
    
  ,
  
    "$match": 
      altNamesLookup: []
    
  ,
  
    "$project": 
      altNamesLookup: false
    
  
])

这里是Mongo playground 供您参考。

【讨论】:

以上是关于如何仅获取不包含在另一条记录的数组中的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从左表中仅获取一条记录与右表中的每条记录

仅重新查询数据表视图表单中的一条记录 (MS Access)

Datatable C# - 如何根据 ID 从一个表中获取详细记录及其关联的另一表中的子记录

Javascript - 如何从数组列表中获取最后一条记录? [复制]

如何获取SQL表中的下一条记录

如何将同一表中的一条记录与另一条记录关联?