1

私はmongoDBが初めてで、十分な例を見ましたが、ほとんどがコレクションの操作方法を示しています。

DB名でmongoDBに保存されているデータをたどりましたmyDB

"_id" : "some_table_name",
"content" : [{
  "id" : "1",
  "loctype" : "Clinic/Hospital",
  "locname" : "KKH"
}, {
  "id" : "2",
  "loctype" : "Clinic/Hospital",
  "locname" : "Singapore National Eye Centre"      
 }
 }]
}

ご覧のとおり、モデルには_idcontentが含まれていcontentます。 はオブジェクトのリストです。

  ... ,
 {
  "id" : "ZZZ",
  "loctype" : "ZZZ",
  "locname" : "ZZZ"      
  },
  ...

PHP

$m = new MongoClient(/* ... */);

$db = $m->myDB;

$collection = $db->coll;

IDのPHPリストを取得するにはどうすればよいですか? [1,2]の場合は。

確かに、すべてのモデルと抽出 ID を取得できますが、mongoDB から直接実行しようとしています。

ありがとう。

4

3 に答える 3

2

これを試して:

$collection = new MongoCollection($db, 'collection_name');

$query = array(
// Some restrictions can be here
);

$ids    = array();
$cursor = $collection->find($query);
foreach ($cursor as $doc) {
    $doc = (array) $doc;
    $ids[] = $doc["id"];
}

var_dump($ids);
于 2013-05-28T10:50:26.617 に答える
2

これをどのようにフォーマットするかによって異なりますが、これは適切な方法でフォーマットされた集約バージョンです。

$mongo->collection->aggregate(array(
    array('$unwind'=>'$content'),
    array('$project'=>array('_id'=>'$content.id'))
))

次のようなドキュメントを印刷します。

[
    {_id:1},
    {_id:2}
]

別の方法は、単一のフィールドを次のように投影することです$db->collection->find(array(),array('content.id'=>1))

ただし、PHPでこれを行う方が良い可能性が最も高いことに注意してください。PHP を使用することが、求めている正確な出力を得る唯一の方法だと思います。

于 2013-05-28T10:52:14.553 に答える
1

次のように、mapreduce に続けて distinct を使用します。

mr = db.runCommand({
  "mapreduce" : "things",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; }, 
  "out": "things" + "_keys"
})
db[mr.result].distinct("_id")
["foo", "bar", "baz", "_id", ...]

または、バラエティを使用して...

于 2013-05-28T11:20:42.853 に答える