【问题标题】:MongoDB - select document where all values in field array are present in a given arrayMongoDB - 选择字段数组中的所有值都存在于给定数组中的文档
【发布时间】:2013-06-01 17:03:56
【问题描述】:

我有类似的文件

{
    foo : [1, 2]
}
{
    foo : [2, 3]
}

给定一个数组

[2, 3, 4]

如何只选择第二个文档?即仅选择 foo 中的所有值与给定数组中的值匹配的文档。

【问题讨论】:

    标签: mongodb mongoose database


    【解决方案1】:

    基本上有一些方法可以匹配数组。没有适合您需求的确切解决方案。

    考虑到您有如下文件:

    { "_id" : ObjectId("51b05a712961f4704684d901"), "x" : [ 6, 7, 8, 9 ] }
    { "_id" : ObjectId("51b05a712961f4704684d902"), "x" : [ 7, 8, 9, 10 ] }
    { "_id" : ObjectId("51b05a712961f4704684d903"), "x" : [ 8, 9, 10, 11 ] }
    

    您可以像这样使用 query1:

    db.collection.find({x:[3,4,5,6]})
    

    结果只对像 x 这样的数组完全匹配

    结果1:

    { "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6 ] }
    

    query1 将不匹配:

    { "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5] }
    { "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6, 7] }
    

    你可以使用:query2 like:

    db.t.find({x:{$all:[3,4]}})
    

    结果 2 可以是:

    { "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
    { "_id" : ObjectId("51b05c332961f4704684dce4"), "x" : [ 3, 4, 5 ] }
    { "_id" : ObjectId("51b05c772961f4704684dce5"), "x" : [ 3, 4, 5, 6, 7 ] }
    

    你可以使用:query3 like:

     db.t.find({x:{$in:[3,4]}})
    

    Result3 看起来像:

    { "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
    { "_id" : ObjectId("51b05a722961f4704684daf2"), "x" : [ 4, 5, 6, 7 ] }
    

    另请参阅此问题:mongodb array matching

    因此,$subset 运算符有一个打开/未解决的票证,它可以执行您可能执行的操作。

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2017-03-06
      • 2017-05-11
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多