如何在MongoDB中查询数组中的单个嵌入式文档?

梅利斯

我正在尝试查询MongoDB中数组中的单个嵌入式文档。我不知道我在做什么错。我将以编程方式查询此文档,并将新的嵌入式文档插入到当前为空的trips数组中。

{
    "_id" : ObjectId("564b3300953d9d51429163c3"),
    "agency_key" : "DDOT",
    "routes" : [
        {
            "route_id" : "6165",
            "route_type" : "3",
            "trips" : [ ]
        },
        {
            "route_id" : "6170",
            "route_type" : "3",
            "trips" : [ ]
        },
...

    ]
}

以下查询-我在mongo shell中运行-返回空:

db.tm_routes.find( { routes :  {$elemMatch: { route_id:6165 } } } ).pretty();

db.tm_routes.find( { routes :  {$elemMatch: { route_id:6165,route_type:3 } } } ).pretty();

db.tm_routes.find({'routes.route_id':6165}).pretty()

db.tm_routes.find({'routes.route_id':6165}).count()就是0

以下查询返回数组中的每个文档

db.tm_routes.find({'routes.route_id':'6165'}).pretty();

{
    "_id" : ObjectId("564b3300953d9d51429163c3"),
    "agency_key" : "DDOT",
    "routes" : [
        {
            "route_id" : "6165",
            "route_type" : "3",
            "trips" : [ ]
        },
        {
            "route_id" : "6170",
            "route_type" : "3",
            "trips" : [ ]
        },
        ...
        ]}

db.tm_routes.find({'routes.route_id':'6165'}).count()返回1。

最后,这是我首先在Node.JS-中插入数据的方式:

async.waterfall([
...
//RETRIEVE ALL ROUTEIDS FOR EVERY AGENCY
        function(agencyKeys, callback) {
          var routeIds = [];
          var routesArr = [];
          var routes = db.collection('routes'); 
//CALL GETROUTES FUNCTION FOR EVERY AGENCY
          async.map(agencyKeys, getRoutes, function(err, results){
            if (err) throw err;
            else {
              callback(null, results);
            }
          });
//GET ROUTE IDS
          function getRoutes(agencyKey, callback){
            var cursor = routes.find({agency_key:agencyKey});
            cursor.toArray(function(err, docs){
              if(err) throw err;
              for(i in docs){
                routeIds.push(docs[i].route_id);
                var routeObj = {
                  route_id:docs[i].route_id,
                  route_type:docs[i].route_type,
                  trips:[]
                };
                routesArr.push(routeObj);
    /* I TRIED 3 DIFFERENT WAYS TO PUSH DATA
//1->


        collection.update({agency_key:agencyKey}, {$push:{"routes":{
                  'route_id':docs[i].route_id,
                  'route_type':docs[i].route_type,
                  'trips':[]
                }}});
    //2->

collection.update({agency_key:agencyKey}, {$push:{"routes":routeObj}});

    */
                  }
    // 3->
                  collection.update({agency_key:agencyKey}, {$push:{routes:{$each:routesArr}}});
                  callback(null, routeIds);
                });
              };
            },
...

    var collection = newCollection(db, 'tm_routes',[]);
    function newCollection(db, name, options){
      var collection = db.collection(name);
      if (collection){
        collection.drop();
      }
      db.createCollection(name, options);
      return db.collection(name);
    }

注意:我不使用猫鼬,如果可能的话,我不想使用。

阿卜杜拉·拉希德(Abdullah Rasheed)

梅利斯

我明白了您的要求,而您需要的是帮助您了解事物在mongodb中的存储方式。要了解的事情:

  • Adocument是MongoDB数据的基本单位,可以与row关系数据库中的进行粗略比较
  • collection可以将A视为具有动态模式的表

因此documents存储在collections。每个文档中都有一个特殊的_id,即集合内是唯一的。您上面以以下格式向我们显示的是One document

{
    "_id" : ObjectId("564b3300953d9d51429163c3"),
    "agency_key" : "DDOT",
    "routes" : [
        {
            "route_id" : "6165",
            "route_type" : "3",
            "trips" : [ ]
        },
        {
            "route_id" : "6170",
            "route_type" : "3",
            "trips" : [ ]
        },
        ...
]}

如果您querytm_routes集合中运行find()将返回各自documentcollection相匹配的查询。因此,当您运行查询时,db.tm_routes.find({'routes.route_id':'6165'}).pretty();它将返回与查询匹配的整个文档。因此,此语句是错误的:

以下查询返回数组中的每个文档

如果您需要在该文档中找到一条特定的路由,并且仅根据您的使用返回该路由,因为它是一个数组,因此您可能必须使用$ -Positional运算符聚合框架

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在嵌入式数组mongodb中查询嵌入式文档

来自分类Dev

如何在 MongoDb 中查询嵌入式文档?

来自分类Dev

如何从mongodb中的嵌套嵌入式文档中查询和返回单个字段?

来自分类Dev

查询mongodb中的嵌入式文档数组

来自分类Dev

查询MongoDB中的嵌入式文档

来自分类Dev

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

来自分类Dev

与数组比较,如何在mongodb中检索部分嵌入式文档?

来自分类Dev

Mongoid在单个查询中推送新的嵌入式文档

来自分类Dev

如何在MongoDB的数组字段中查询和删除嵌入式对象?

来自分类Dev

php:将mongodb嵌入式文档查询到数组中

来自分类Dev

嵌入式文档数组中的MongoDB Aggregate ObjectId

来自分类Dev

如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

来自分类Dev

如何查询Mongodb的嵌入式数组

来自分类Dev

mongodb中的时间序列数据-如何查询嵌入式文档

来自分类Dev

在mongodb中展开嵌入式文档

来自分类Dev

如何在Rails和Mongoid中查询嵌入式文档

来自分类Dev

如何在 rails only 查询中包含嵌入式文档

来自分类Dev

如何在OrientDB中插入嵌入式文档

来自分类Dev

如何在Meteor中循环浏览嵌入式文档

来自分类Dev

如何在mongoDB中的多对多关系中使用嵌入式文档结构?

来自分类Dev

如何在Mongoose的嵌入式文档中检索数组的最后一个对象?

来自分类Dev

使用Presto查询MongoDB嵌入式/嵌套文档的数组

来自分类Dev

如何在MongoDB中的嵌入式数组对象中插入json对象?

来自分类Dev

如何将现有的子文档推送到MongoDB中的嵌入式数组中?

来自分类Dev

使用C#在MongoDB集合中的嵌入式文档的子句查询中的投影

来自分类Dev

如何在MongoDB中的嵌入式文档中获得同一级别的所有字段

来自分类Dev

春季查询嵌入式文档的数组

来自分类Dev

使用Java在MongoDB中的嵌入式文档中索引和搜索“数组”

来自分类Dev

如何在MongoDB中使用数组获取嵌入式文档(使用Mongoose)

Related 相关文章

  1. 1

    如何在嵌入式数组mongodb中查询嵌入式文档

  2. 2

    如何在 MongoDb 中查询嵌入式文档?

  3. 3

    如何从mongodb中的嵌套嵌入式文档中查询和返回单个字段?

  4. 4

    查询mongodb中的嵌入式文档数组

  5. 5

    查询MongoDB中的嵌入式文档

  6. 6

    在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

  7. 7

    与数组比较,如何在mongodb中检索部分嵌入式文档?

  8. 8

    Mongoid在单个查询中推送新的嵌入式文档

  9. 9

    如何在MongoDB的数组字段中查询和删除嵌入式对象?

  10. 10

    php:将mongodb嵌入式文档查询到数组中

  11. 11

    嵌入式文档数组中的MongoDB Aggregate ObjectId

  12. 12

    如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

  13. 13

    如何查询Mongodb的嵌入式数组

  14. 14

    mongodb中的时间序列数据-如何查询嵌入式文档

  15. 15

    在mongodb中展开嵌入式文档

  16. 16

    如何在Rails和Mongoid中查询嵌入式文档

  17. 17

    如何在 rails only 查询中包含嵌入式文档

  18. 18

    如何在OrientDB中插入嵌入式文档

  19. 19

    如何在Meteor中循环浏览嵌入式文档

  20. 20

    如何在mongoDB中的多对多关系中使用嵌入式文档结构?

  21. 21

    如何在Mongoose的嵌入式文档中检索数组的最后一个对象?

  22. 22

    使用Presto查询MongoDB嵌入式/嵌套文档的数组

  23. 23

    如何在MongoDB中的嵌入式数组对象中插入json对象?

  24. 24

    如何将现有的子文档推送到MongoDB中的嵌入式数组中?

  25. 25

    使用C#在MongoDB集合中的嵌入式文档的子句查询中的投影

  26. 26

    如何在MongoDB中的嵌入式文档中获得同一级别的所有字段

  27. 27

    春季查询嵌入式文档的数组

  28. 28

    使用Java在MongoDB中的嵌入式文档中索引和搜索“数组”

  29. 29

    如何在MongoDB中使用数组获取嵌入式文档(使用Mongoose)

热门标签

归档