【问题标题】:mongo : get one attribute from amongo : 从 a 中获取一个属性
【发布时间】:2013-06-13 11:52:11
【问题描述】:

在 mongo shell 或 PHP 中 如何检索此文档的“列表”属性?

{
"_id" : ObjectId("51b972ebe4b075a9690bbc5b"),
"list" : [
"Environnement",
"Toutes thématiques",
"Transports"]
}

我正在寻找怎么做 db.tags.list 将返回 mycollection 中文档的所有“列表”属性

答案是: db.tags.findOne().list

【问题讨论】:

  • $doc['list'] 会做到的
  • 是的,就像 Sammaye 说的那样......另外,如果你有一个更结构化的对象,你可以使用诸如 $doc["list.someotherstuff"] 之类的点来访问
  • db.collection.find({'willy': 'wonka'})[0].hat_color

标签: php mongodb shell


【解决方案1】:

如果您想直接访问您的文档:

document['list']

如果您正在访问一个集合:

db.collection.findOne({_id: ObjectId("51b972ebe4b075a9690bbc5b")}).list

【讨论】:

  • *假设您遇到的第一种情况: var document = { "_id" : ObjectId("51b972ebe4b075a9690bbc5b"), "list" : [ "Environnement", "Toutes thématiques", "运输"] }
【解决方案2】:

如果您需要tags 集合中所有 个文档中的所有list 属性,您可能需要使用db.collection.find() 方法(PHP 中的MongoCollection::find())。

$tags = array();

foreach ($collection->find() as $document) {
    if (empty($document['list'] || ! is_array($document['list'])) {
        continue;
    }

    foreach ($document['list'] as $tag) {
        $tags[] = $tag;
    }
}

顺便说一句,如果这些文档包含您不需要的其他字段,您可以使用第二个参数提供对find() 的投影并限制返回的字段。在这种情况下,{ list: 1 } 会这样做。

更进一步,如果您想快速检索集合文档中list 字段中的所有唯一标签,可以使用distinct 数据库命令(PHP 中的MongoCollection::distinct()

假设集合有以下文件:

> db.foo.insert({x:['a','b','c']})
> db.foo.insert({x:['a','c','d']})

以下方法将执行distinct数据库命令并返回数组[ "a", "b", "c", "d" ]

$uniqueTags = $collection->distinct('list');

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多