相关疑难解决方法(0)

在MongoDB中检索n级深层子文档

我在mongoDB中有一个深度嵌套的文档,我想获取单个子对象.

例:

{
   "schoolName": "Cool School",
   "principal": "Joe Banks",
   "rooms": [
      {
         "number": 100
         "teacher": "Alvin Melvin"
         "students": [
            {
               "name": "Bort"
               "currentGrade": "A"
            },
            // ... many more students
         ]
      },
      // ... many more rooms
   ]
}
Run Code Online (Sandbox Code Playgroud)

最近Mongo更新为允许使用$ elemMatch投影进行1级深度子对象检索:

var projection = { _id: 0, rooms: { $elemMatch: { number: 100 } } };
db.schools.find({"schoolName": "Cool School"}, projection);
// returns { "rooms": [ /* array containing only the matching room */ ]  }
Run Code Online (Sandbox Code Playgroud)

但当我尝试以同样的方式取一个学生(2级深)时,我收到一个错误:

var projection …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb

12
推荐指数
1
解决办法
7844
查看次数

在深度嵌套的文档查询中使用MongoDB的位置运算符$

是否可以将位置运算符'$'与深层嵌套文档数组上的查询结合使用?

考虑以下定义'user'的嵌套文档:

{
   username: 'test',
   kingdoms: [

      {
          buildings: [

              {
                  type: 'castle'

              },
              {
                  type: 'treasury'
              },

              ...

          ]

      },

      ...

   ] 
}
Run Code Online (Sandbox Code Playgroud)

我们希望为特定用户返回"城堡",例如:

{
    kingdoms: [{

        buildings: [{

            type: 'castle'

        }]

    }]
}
Run Code Online (Sandbox Code Playgroud)

因为你不能两次使用$运算符(https://jira.mongodb.org/browse/server-831)我知道我也不能查询某个特定的王国,所以我正在尝试写一个查找语句第n个王国.

这在更新深度嵌套的子文档(Mongodb更新深层嵌套的子文档)时似乎有意义,但我在查找查询方面的成功较少.

我可以通过查询返回第一个王国的建筑物:

db.users.findOne(
    { username: 'test' },
    { kingdoms: {$slice: [0, 1]}, 'kingdom.buildings': 1 }
);
Run Code Online (Sandbox Code Playgroud)

但这会归还那个王国的所有建筑物.

按照位置运算符的单级示例,我正在尝试这样的查询:

db.users.findOne(
    { username: 'test', 'kingdoms.buildings.type': 'castle' },
    { kingdoms: {$slice: [n, 1]}, 'kingdom.buildings.$': 1 }
);
Run Code Online (Sandbox Code Playgroud)

以形式:

db.collection.find( { <array.field>: …
Run Code Online (Sandbox Code Playgroud)

nested mongodb positional-operator

9
推荐指数
1
解决办法
3958
查看次数

如何更新猫鼬嵌套数组文档

我知道这个问题是重复的,但我不知道为什么我被卡住了

问题

如何"requirement.$.update"使用 find by_idrequirement.update._id (如果需要requirement._id)编辑数组文档

// edit version number level2
  exports.editVersionNumberPost = function(req, res){ 
    var query = {
            date: req.body.date,
            number: req.body.number,
            description: req.body.description 
        }
    Project.findOneAndUpdate({ name:  req.params.name, 
                               "requirement._id" : req.params.versionID, 
                               "requirement.update._id" : req.params.versionNumID},  
        {"$set": 
            {"requirement.$.update" :  query 
        }   
        },  { new: true }, 
        function(err, obj){})
 };
Run Code Online (Sandbox Code Playgroud)

我的架构

----------------
    namr: String
    requirement:[{
        version: Number,
        update:[{
            date: Date,
            number: Number,
            description: String
        }]
    }],
--------
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js express

2
推荐指数
1
解决办法
1661
查看次数