【问题标题】:Can you combine specific and none-specific fields in mongodb find on embedded documents?您可以在嵌入文档中结合 mongodb find 中的特定字段和非特定字段吗?
【发布时间】:2016-11-30 23:23:42
【问题描述】:

我嵌入了类似的文档

{ a: 
     { aa: { aaa: 1, bbb: 2, ccc: 3 },
       bb: { aaa: 1, bbb: 2, ccc: 3 },
       cc: { aaa: 1, bbb: 2, ccc: 3 }
     }
}

如何编写如下字段过滤器:

find({}, { "a.*.aaa": 1 } )

* = aa, bb, cc

在 mongodb 文档中没有提示(参见 https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    如果您要查询值,则可以这样做。但你正在尝试的是关键。我们必须在密钥上提供完全匹配。

    我们可以使用$regex 来匹配值而不是键。

    让我们收藏

    db.collection.find();
    { "_id" : ObjectId("583eed6c911c8e111fb99bf4"), "name" : "a.aa.aaa" }
    { "_id" : ObjectId("583eed72911c8e111fb99bf5"), "name" : "a.bb.aaa" }
    { "_id" : ObjectId("583eed77911c8e111fb99bf6"), "name" : "a.bb.bbb" }
    { "_id" : ObjectId("583eed7b911c8e111fb99bf7"), "name" : "a.cc.bbb" }
    { "_id" : ObjectId("583eed7f911c8e111fb99bf8"), "name" : "a.cc.aaa" }
    { "_id" : ObjectId("583eed84911c8e111fb99bf9"), "name" : "a.cc.bbb" }
    { "_id" : ObjectId("583eed88911c8e111fb99bfa"), "name" : "a.cc.ccc" }
    { "_id" : ObjectId("583eed9a911c8e111fb99bfb"), "name" : "a.aa.ccc" }
    { "_id" : ObjectId("583eeda4911c8e111fb99bfc"), "name" : "a.aa.bbb" }
    { "_id" : ObjectId("583eedfd911c8e111fb99bfd"), "name" : "a.aa.abc" }
    { "_id" : ObjectId("583eee03911c8e111fb99bfe"), "name" : "a.bb.abc" }
    { "_id" : ObjectId("583eee06911c8e111fb99bff"), "name" : "a.cc.abc" }
    

    那么使用 $regex 的查询就像

    db.collection.find({name:{$regex: /a.*.aa*/}});
    

    以及这个查询的结果

    { "_id" : ObjectId("583eed6c911c8e111fb99bf4"), "name" : "a.aa.aaa" }
    { "_id" : ObjectId("583eed72911c8e111fb99bf5"), "name" : "a.bb.aaa" }
    { "_id" : ObjectId("583eed7f911c8e111fb99bf8"), "name" : "a.cc.aaa" }
    { "_id" : ObjectId("583eed9a911c8e111fb99bfb"), "name" : "a.aa.ccc" }
    { "_id" : ObjectId("583eeda4911c8e111fb99bfc"), "name" : "a.aa.bbb" }
    { "_id" : ObjectId("583eedfd911c8e111fb99bfd"), "name" : "a.aa.abc" }
    { "_id" : ObjectId("583eee03911c8e111fb99bfe"), "name" : "a.bb.abc" }
    { "_id" : ObjectId("583eee06911c8e111fb99bff"), "name" : "a.cc.abc" }
    

    请参考:Mongodb - regex match of keys for subobjects

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2016-04-23
      • 2013-01-06
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多