这是集合“SoManySins”中7个测试/示例文档中的第一个文档。
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"Treats" : "Sin1 = Gluttony",
"Sin1" : "Gluttony",
"Favourited" : "YES",
"RecentActivity" : "YES",
"GoAgain?" : "YeaSure."
}我希望能够通过查询来检索任何位置的任何信息,只需参考该位置。下面的文档,
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"Sin1" : "Gluttony",
"?????????" : "??????",
"RecentActivity" : "YES",
"GoAgain?" : "YeaSure."
} 可以检索第三个键~值对中的任何内容。为什么必须提前知道密钥中的数据是什么?如果一个集合有相同的结构,谁需要知道呢?这样,你可以得到两倍的效率?比如有一大堆邮箱,你的应用程序的用户提供了键和值;你的应用程序只是查询dbs的“文档”数组的位置。克拉拉?最后呢?我希望?
发布于 2013-04-15 09:02:04
您提供的示例文档没有保存为BSON中的数组:
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"Sin1" : "Gluttony",
"?????????" : "??????",
"RecentActivity" : "YES",
"GoAgain?" : "YeaSure."
}根据您使用的MongoDB驱动程序,这里的字段通常在应用程序代码中表示为关联数组或散列。这些数据结构不是保持顺序的,所以您不能假设给定文档中的第三个字段将对应于另一个文档中的相同字段(甚至不能假设相同的字段顺序在多次获取时是一致的)。您需要按名称引用该字段。
如果将数组用于字段,则可以按位置引用或使用$slice projection选择数组的子集。
包含字段数组的示例文档:
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"fields": [
{ "Sin1" : "Gluttony" },
{ "?????????" : "??????" },
{ "RecentActivity" : "YES" },
{ "GoAgain?" : "YeaSure." }
]
}。。并查询以找到字段数组的第二个元素(带有skip 1,limit 1的$slice ):
db.SoManySins.find({}, { fields: { $slice: [1,1]} })
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"fields" : [
{
"?????????" : "??????"
}
]
}发布于 2013-04-16 14:00:38
当您可能不知道数据是什么,但是知道数据的结构时,这是一种查询和返回数据的方法: Mongo Shell和PHP中的示例
//基本设置:
$dbhost = 'localhost'; $dbname = 'test';
$m = new Mongo("mongodb://$dbhost");
$db = $m->$dbname;
$CursorFerWrites = $db->NEWthang; //定义一组数据,用PHP创建文档:
$TheFieldGenerator = array( 'FieldxExp' => array(
array('Doc1 K1'=>'Val A1','Doc1 K2'=>'ValA2','Doc1 K3'=>'Val A3'),
array('Doc2 K1'=>'V1','Doc2 K2'=>'V2','Doc2 K3'=>'V3' ) ) ) ; //然后写入MongoDB:
$CursorFerWrites->save($TheFieldGenerator); 注意:在Shell中:这将生成相同的文档:
> db.NEWthang.insert({"FieldxExp" : [
{"Doc1 K1":"Val A1","Doc1 K2":"Val A2","Doc1 K3":"Val A3"},
{"Doc2 K1":"V1", "Doc2 K2":"V2","Doc2 K3":"V3"}
]
}) 现在,一些mongodb Shell语法:
> db.NEWthang.find().pretty()
{
"_id" : ObjectId("516c4053baa133464d36e836"),
"FieldxExp" : [
{
"Doc1 K1" : "Val A1",
"Doc1 K2" : "Val A2",
"Doc1 K3" : "Val A3"
},
{
"Doc2 K1" : "V1",
"Doc2 K2" : "V2",
"Doc2 K3" : "V3"
}
]
}
> db.NEWthang.find({}, { "FieldxExp" : { $slice: [1,1]} } ).pretty()
{
"_id" : ObjectId("516c4053baa133464d36e836"),
"FieldxExp" : [
{
"Doc2 K1" : "V1",
"Doc2 K2" : "V2",
"Doc2 K3" : "V3"
}
]
}
> db.NEWthang.find({}, { "FieldxExp" : { $slice: [0,1]} } ).pretty()
{
"_id" : ObjectId("516c4053baa133464d36e836"),
"FieldxExp" : [
{
"Doc1 K1" : "Val A1",
"Doc1 K2" : "Val A2",
"Doc1 K3" : "Val A3"
}
]
} 最后,用PHP ::
//这些将用于构建MongoCursor:
$myEmptyArray = array();
$TheProjectionCriteria = array('FieldxExp'=> array('$slice' => array(1,1))); //在这里设置:
$CursorNEWthang1 = new MongoCollection($db, 'NEWthang'); //现在准备好进行查询/读取:
$ReadomgomgPls=$CursorNEWthang1->find($myEmptyArray,$TheProjectionCriteria); 第二个文档将被打印出来:
foreach ($ReadomgomgPls as $somekey=>$AxMongoDBxDocFromCollection) {
var_dump($AxMongoDBxDocFromCollection);echo '<br />';
}希望这对一些人有帮助。
https://stackoverflow.com/questions/15917865
复制相似问题