簡體   English   中英

MongoDB查詢文檔,其中嵌套數組等於或固定數組的子集

[英]Mongodb query documents where nested array is equal or subset of fixed array

我一直不停地試圖解決以下問題(我正在使用新的c#2.0驅動程序):

這個想法是返回所有嵌套數組等於或固定數組子集的文檔。 例:

固定數組:[“ A”,“ B”,“ C”]

容器文件:

{
    container1 { Name: "name1", Tags: [ "A", "B" ] },
    container2 { Name: "name4", Tags: [ "A", "B", "C", "D" ] },
    container3 { Name: "name2", Tags: [ "A" ] },
    container4 { Name: "name3", Tags: [ "A", "B", "C" ] }
}

根據以上數據,結果應為:

{
    container1 { Name: "name1", Tags: [ "A", "B" ] },
    container3 { Name: "name2", Tags: [ "A" ] },
    container4 { Name: "name3", Tags: [ "A", "B", "C" ] }
}

注意,因為[[A],“ B”,“ C”,“ D”]不是子集,也不等於[“ A”,“ B”,“ C”],所以container2不屬於結果集

無論如何,如果您有非2.0-C#驅動程序解決方案,請在此處發布。 我會幫你的。

非常感激!!!

在聚合中使用$ setIsSubset使用mongo Set Operator ,您將得到結果,請檢查以下查詢:

db.collectionName.aggregate({
  "$project": {
    "Name": 1,
    "Tags": 1,
    "match": {
      "$setIsSubset": ["$Tags", ["A", "B", "C"]] //check Tags is subset of given array in your case array is ["A","B","C"]
    }
  }
}, {
  "$match": {
    "match": true // return only those matched true values
  }
}, {
  "$project": {
    "Name": 1,
    "Tags": 1
  }
}).pretty()

嘗試

db.collectionName.find({$or:[{Tags: ["A","B","C"]},{Tags: {$in:["A","B","C"], $not : {$all : ["A","B","C"]}}}]})

說明:

$ in給出所有包含給定集合至少一個元素的文檔; $ all給出給定集合的超集,包括集合本身。

您要查找的是給定集合任何包含至少一個元素但不包含其他元素的集合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM