MongodB通过属性名称检索子文档

时间:2014-01-29 01:13:52

标签: mongodb subdocument

我的文档如下:

{ "entity_id" : 2,
  "features" :
  [
     { "10" : "name" },
     { "20" : "description" },
     ... ,
     { "90" : "availability" }
  ]
 }

我想知道两件事:“entity_id”(2)的值,以及“features”数组的其中一个元素中的属性值,只能检索 子文档

{ "20" : "description" }

在一个查询中。非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您只想获得整个文档的一部分,请使用所谓的Projection operators

见下面的例子:

> db.collection.find().pretty()
{
    "_id" : ObjectId("52e861617acb7ce761e64a93"),
    "entity_id" : 2,
    "features" : [
        {
            "10" : "name"
        },
        {
            "20" : "description"
        },
        {
            "90" : "availability"
        }
    ]
}

投影运算符在find()中指定,如下所示:

> db.collection.find({},{ features : { $elemMatch : { 20 : { $exists: true } }}}).pretty()
{
    "_id" : ObjectId("52e861617acb7ce761e64a93"),
    "features" : [
        {
            "20" : "description"
        }
    ]
}

> db.collection.find({},{ entity_id : 1, features : { $elemMatch : { 20 : { $exists: true } }}}).pretty()
{
    "_id" : ObjectId("52e861617acb7ce761e64a93"),
    "entity_id" : 2,
    "features" : [
        {
            "20" : "description"
        }
    ]
}
> db.collection.find({},{ _id : 0, entity_id : 1, features : { $elemMatch : { 20 : { $exists: true } }}}).pretty()
{ "entity_id" : 2, "features" : [ { "20" : "description" } ] }
自版本2.2以来,MongoDB中提供了用于投影的

$elemMatch

希望它能解决你的问题。