【问题标题】:Retrieve only some fields from sub-document仅从子文档中检索某些字段
【发布时间】:2018-03-09 02:21:18
【问题描述】:

(我是一个非常简单的问题的新手):

如果我的数据库(来自文档示例)包含:

{ "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
{ "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
{ "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
{ "item" : "planner", "qty" : 75, "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "status" : "D" }
{ "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }

我发出这个命令:

db.inventory.find( { item: /^j/ }, { size: 1 } )

我拿回了这份文件:

{
    "_id" : ObjectId("59448e8544c2d6b6ced4ac66"),
    "size" : {
        "h" : 14.0,
        "w" : 21.0,
        "uom" : "cm"
    }
}

我想做的是,只取回“h”。如果我尝试这个命令:

db.inventory.find( { item: /^j/ }, { size.h: 1 } )

我得到“Unexpected token .

我怎样才能只返回数组“size”的“h”字段?

谢谢!

PS,我试过how to retrieve partial objects from object array in a field in mongodb中的例子和答案,结果却是“Script executed successfully, but there are no results to show.

【问题讨论】:

  • 因为它不是数组。并且非常具体的错误消息应该指出“点”是问题的明确来源. 查看核心文档中的"Dot Notation" 和非常清晰的示例"<embedded document>.<field>",它非常清楚地显示了“引号” ""
  • 谢谢尼尔。你是一位伟大的老师。

标签: mongodb mongodb-query


【解决方案1】:

您必须用引号将键括起来,这样语法才正确。密钥只能包含 $、_ 和字母数字字符。如果对象字面量中的键无效,只需用引号将键括起来即可绕过:

db.inventory.find( { item: /^j/ }, { 'size.h': 1 } )

【讨论】:

    【解决方案2】:
    //use when you want `_id,size` (As object) with its only property `h` in 
    //$project,
    
    db.inventory.aggregate([{$match:{  item: /^j/  } },{ $project:{ 
    "size.h":"$size.h" } }])
    
    //use when you want `_id,size` size ase whole object  
    //$project,
    
    db.inventory.aggregate([{$match:{  item: /^j/  } },{ $project:{ "size":1 } 
    }]) 
    
    • 您可以使用聚合,它可以帮助您获取任何形式的数据。

    • 它包括管道。

    • 它接受数组

    注意:- 要忽略任何属性,只需将 $project 属性中的 1 更改为 0

    谢谢

    【讨论】:

    • 另一个答案正是我现在需要的。但是,我非常感谢您的回答并将研究它,因为我相信我会学到一些我真正需要知道的东西。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2011-09-25
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多