首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以仅使用数组([x][y[x][z]])方法查询MongoDB?不知道元素的内容?

是否可以仅使用数组([x][y[x][z]])方法查询MongoDB?不知道元素的内容?
EN

Stack Overflow用户
提问于 2013-04-10 13:43:42
回答 2查看 157关注 0票数 0

这是集合“SoManySins”中7个测试/示例文档中的第一个文档。

代码语言:javascript
复制
{
  "_id" : ObjectId("51671bb6a6a02d7812000018"),
  "Treats" : "Sin1 = Gluttony",
  "Sin1" : "Gluttony",
  "Favourited" : "YES",
  "RecentActivity" : "YES",
  "GoAgain?" : "YeaSure."
}

我希望能够通过查询来检索任何位置的任何信息,只需参考该位置。下面的文档,

代码语言:javascript
复制
{
   "_id" : ObjectId("51671bb6a6a02d7812000018"),
   "Sin1" : "Gluttony",
   "?????????" : "??????",
   "RecentActivity" : "YES",
   "GoAgain?" : "YeaSure."
} 

可以检索第三个键~值对中的任何内容。为什么必须提前知道密钥中的数据是什么?如果一个集合有相同的结构,谁需要知道呢?这样,你可以得到两倍的效率?比如有一大堆邮箱,你的应用程序的用户提供了键和值;你的应用程序只是查询dbs的“文档”数组的位置。克拉拉?最后呢?我希望?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-15 09:02:04

您提供的示例文档没有保存为BSON中的数组:

代码语言:javascript
复制
{
    "_id" : ObjectId("51671bb6a6a02d7812000018"),
    "Sin1" : "Gluttony",
    "?????????" : "??????",
    "RecentActivity" : "YES",
    "GoAgain?" : "YeaSure."
}

根据您使用的MongoDB驱动程序,这里的字段通常在应用程序代码中表示为关联数组或散列。这些数据结构不是保持顺序的,所以您不能假设给定文档中的第三个字段将对应于另一个文档中的相同字段(甚至不能假设相同的字段顺序在多次获取时是一致的)。您需要按名称引用该字段。

如果将数组用于字段,则可以按位置引用或使用$slice projection选择数组的子集。

包含字段数组的示例文档:

代码语言:javascript
复制
{
    "_id" : ObjectId("51671bb6a6a02d7812000018"),
    "fields": [
        { "Sin1" : "Gluttony" },
        { "?????????" : "??????" },
        { "RecentActivity" : "YES" },
        { "GoAgain?" : "YeaSure." }
    ]
}

。。并查询以找到字段数组的第二个元素(带有skip 1,limit 1的$slice ):

代码语言:javascript
复制
db.SoManySins.find({}, { fields: { $slice: [1,1]} })
{
    "_id" : ObjectId("51671bb6a6a02d7812000018"),
    "fields" : [
        {
            "?????????" : "??????"
        }
    ]
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-16 14:00:38

当您可能不知道数据是什么,但是知道数据的结构时,这是一种查询和返回数据的方法: Mongo Shell和PHP中的示例

//基本设置:

代码语言:javascript
复制
 $dbhost = 'localhost'; $dbname = 'test';
 $m = new Mongo("mongodb://$dbhost");
 $db = $m->$dbname;
 $CursorFerWrites = $db->NEWthang; 

//定义一组数据,用PHP创建文档:

代码语言:javascript
复制
 $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:

代码语言:javascript
复制
 $CursorFerWrites->save($TheFieldGenerator); 

注意:在Shell中:这将生成相同的文档:

代码语言:javascript
复制
 > 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语法:

代码语言:javascript
复制
 > 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:

代码语言:javascript
复制
 $myEmptyArray = array();
 $TheProjectionCriteria = array('FieldxExp'=> array('$slice' => array(1,1))); 

//在这里设置:

代码语言:javascript
复制
 $CursorNEWthang1 = new MongoCollection($db, 'NEWthang'); 

//现在准备好进行查询/读取:

代码语言:javascript
复制
 $ReadomgomgPls=$CursorNEWthang1->find($myEmptyArray,$TheProjectionCriteria); 

第二个文档将被打印出来:

代码语言:javascript
复制
 foreach ($ReadomgomgPls as $somekey=>$AxMongoDBxDocFromCollection) {
var_dump($AxMongoDBxDocFromCollection);echo '<br />';
 }

希望这对一些人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15917865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档