鉴于以下文件(摘录):
{
udid: "0E321DD8-1983-4502-B214-97D6FB046746",
person: {
"firstname": "Jacob",
"lastname": "Prince"
}
}
我的控制台基本上可以做到:
mycollection.first.attributes.values_at("udid", "person")
这会将人作为哈希返回。
现在我想要一个字段。但这些不起作用(person.firstname):
mycollection.first.attributes.values_at("udid", "person.firstname")
mycollection.first.attributes.values_at("udid", "person[:firstname]")
mycollection.first.attributes.values_at("udid", "person['firstname']")
如何访问此人儿童文件?
我需要用户选择要导出的fied。我正在考虑做这样的事情:
class Foo
include Mongoid::Document
# fields definitions
embeds_one :person # two fields: firstname, lastname
def to_csv *columns
attributes.values_at *columns
end
end
答案 0 :(得分:0)
选择特定字段的最有效方法是什么?
如果您已经知道字段及其嵌套键,则使用Ruby v2.3 +可以使用dig()内置方法。例如:
document = collection.find({},{'projection' => {'uid' => 1, "person.firstname" => 1 }}).first
result = [document.dig("uid"), document.dig("person", "firstname")]
puts result.inspect
或者,根据您的应用用例,您还可以使用MongoDB Aggregation Pipeline,尤其是$project operator 例如:
document = collection.aggregate([{"$project"=>{ :uid=>"$uid", :person_firstname=>"$person.firstname"}}]).first
puts document.values_at("uid", "person_firstname").inspect
请注意,上面的投影会将嵌套的person.firstname
重命名为名为person_firstname
的展平字段。