这是7个测试/示例文档中的第一个,收集在“SoManySins”中。
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"Treats" : "Sin1 = Gluttony",
"Sin1" : "Gluttony",
"Favourited" : "YES",
"RecentActivity" : "YES",
"GoAgain?" : "YeaSure."
}
我希望能够查询以检索任何位置的任何信息, 只是通过提到这个位置。以下文件
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"Sin1" : "Gluttony",
"?????????" : "??????",
"RecentActivity" : "YES",
"GoAgain?" : "YeaSure."
}
可以检索第3个键值中的任何内容 对。为什么要提前知道什么是 数据是关键?如果一个具有相同的结构 收藏,谁需要知道?这样,你就可以得到 效率翻倍?就像有很多邮箱一样 并且您的应用用户提供密钥和价值;你的应用 只查询dbs'文档'数组的位置。 克拉拉?最后?我希望?
答案 0 :(得分:0)
您提供的示例文档未保存为BSON中的数组:
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"Sin1" : "Gluttony",
"?????????" : "??????",
"RecentActivity" : "YES",
"GoAgain?" : "YeaSure."
}
根据您使用的MongoDB驱动程序,此处的字段通常在应用程序代码中表示为关联数组或散列。这些数据结构不是保持顺序的,因此您不能假定给定文档中的第3个字段将对应于另一个文档中的相同字段(或者甚至相同的字段顺序将在多个提取中保持一致)。您需要按名称引用该字段。
如果您为字段使用数组,则可以按位置引用或使用$slice
projection选择数组的子集。
包含字段数组的示例文档:
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"fields": [
{ "Sin1" : "Gluttony" },
{ "?????????" : "??????" },
{ "RecentActivity" : "YES" },
{ "GoAgain?" : "YeaSure." }
]
}
..并查询以查找fields数组的第二个元素(a $slice
,跳过1,限制1):
db.SoManySins.find({}, { fields: { $slice: [1,1]} })
{
"_id" : ObjectId("51671bb6a6a02d7812000018"),
"fields" : [
{
"?????????" : "??????"
}
]
}
答案 1 :(得分:0)
这是查询和获取数据的一种方法 知道数据是什么,但你知道数据的结构: 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);
> 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 ::
中编写Query//这些将用于构建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 />';
}
希望这对一些人有用。