相关疑难解决方法(0)

如何在mongodb中更新多个数组元素

我有一个Mongo文档,其中包含一系列元素.

我想重置.handled数组中所有对象的属性.profile= XX.

该文件采用以下形式:

{
    "_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
    "user_id": "714638ba-2e08-2168-2b99-00002f3d43c0",
    "events": [{
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 20,
            "data": "....."
        }
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

所以,我尝试了以下内容:

.update({"events.profile":10},{$set:{"events.$.handled":0}},false,true)
Run Code Online (Sandbox Code Playgroud)

但是,它仅更新每个文档中第一个匹配的数组元素.(这是$的定义行为- 位置运算符.)

如何更新所有匹配的数组元素?

arrays mongodb mongodb-query

171
推荐指数
9
解决办法
10万
查看次数

在mongodb中更新嵌套数组

我在mongodb中有一个文档,我需要更新2层深度嵌套的对象数组,如下所示:

{
    id: 1,
    items: [
        {
            id: 2,
            blocks: [
                {
                    id: 3
                    txt: 'hello'
                }
            ]
        }
    ] 
}
Run Code Online (Sandbox Code Playgroud)

如果只有一个级别的深度数组,我可以使用位置运算符来更新其中的对象,但对于第二级,我唯一的选择是使用位置运算符和嵌套对象的索引,如下所示:

db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但对我来说似乎很危险,因为我正在构建一个Web服务,索引号应该来自客户端,它可以发送100000作为索引,这将迫使mongodb创建一个具有空值的100000索引的数组.

有没有其他方法来更新这样的嵌套对象,我可以引用对象的ID而不是它的位置,或者可能是在查询中使用它之前检查提供的索引是否超出范围的方法?

arrays nested mongodb

44
推荐指数
2
解决办法
3万
查看次数

通过mongo shell更新mongoDB中的嵌套数组

以下是MongoDB文档:

{
    "_id" : 2,
    "mem_id" : M002,
    "email" : "xyz@gmail.com",
    "event_type" : [ 
        {
            "name" : "MT",
            "count" : 1,
            "language" : [ 
                {
                    "name" : "English",
                    "count" : 1,
                    "genre" : [ 
                        {
                            "name" : "Action",
                            "count" : 6
                        }, 
                        {
                            "name" : "Sci-Fi",
                            "count" : 3
                        }
                    ],
                    "cast" : [ 
                        {
                            "name" : "Sam Wortington",
                            "count" : 2
                        }, 
                        {
                            "name" : "Bruce Willis",
                            "count" : 4
                        }, 
                        {
                            "name" : "Will Smith",
                            "count" : 7 …
Run Code Online (Sandbox Code Playgroud)

mongodb

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

Mongodb“无法在元素中创建字段'x'”

我正在尝试将交易插入到交易列表中。

这是文件:

{
    "_id" : ObjectId("5cb26787c3eb6c8229a92954"),
    "first_name" : "testing",
    "last_name" : "testing",
    "ssn" : "123456789",
    "address" : "123 testing st",
    "account" : {
        "account_number" : 32362897,
        "last_access_timestamp" : "2019-04-13 18:49:43",
        "account_type" : [
            {
                "checking" : {
                    "balance" : 0,
                    "transaction" : [ ]
                }
            },
            {
                "saving" : {
                    "balance" : 0,
                    "transaction" : [ ]
                }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

ssn 应该是唯一的,所以我将其用作匹配标准。这是我用来插入检查交易列表的查询:

db.customer.update({'ssn': '123456789'},
                    {'$push': {'account.account_type.checking.transaction': {
                         'amount': 120,
                         'transaction_type': 'deposit',
                         'timestamp': '11:11:11'
                     }}})
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

{
    "_id" : …
Run Code Online (Sandbox Code Playgroud)

mongodb

8
推荐指数
0
解决办法
1万
查看次数

更新嵌套数组Mongoose

我正在开发一个快速js应用程序,我需要更新嵌套数组.1)架构:

//Creating a mongoose schema
var userSchema = mongoose.Schema({
_id: {type: String, required:true},
name: String,
sensors: [{
    sensor_name: {type: String, required:true},
    measurements: [{time: String}]
}] });
Run Code Online (Sandbox Code Playgroud)

2)这是代码片段,解释如下:

router.route('/sensors_update/:_id/:sensor_name/')
.post(function (req, res) {
User.findOneAndUpdate({_id:req.body._id}, {$push: {"sensors" : 
{"sensor_name" : req.body.sensor_name , "measurements.0.time": req.body.time } } },
{new:true},function(err, newSensor) {
if (err)
res.send(err);
res.send(newSensor)
}); });
Run Code Online (Sandbox Code Playgroud)

我能够使用带推技术的findOneAndUpdate成功更新测量数组的值,但是当我尝试向传感器阵列添加多个测量时,我失败了.

这是当我向传感器阵列发布第二次测量时得到的当前json:

{
"_id": "Manasa",
"name": "Manasa Sub",
"__v": 0,
"sensors": [
{
  "sensor_name": "ras",
  "_id": "57da0a4bf3884d1fb2234c74",
  "measurements": [
    {
      "time": "8:00"
    }
  ]
},
{ …
Run Code Online (Sandbox Code Playgroud)

arrays json mongoose mongodb express

6
推荐指数
2
解决办法
6886
查看次数

更新时Mongo错误:无法使用零件遍历元素

我正在尝试使用以下结构更新我的 mongo 集合

{
    "_id" : "T6GqWsi9qSxnyGzgC",
    "spec_name" : "test",
    "version" : "test",
    "message_type" : "test",
    "message_trigger" : "test",
    "segments" : [
        {
            "segment_id" : "MSH",
            "sequences" : [
                {
                    "dataType" : "ST",
                    "optionality" : "R",
                    "name" : "Field Seperator"
                },
                {
                    "dataType" : "ST",
                    "optionality" : "R",
                    "name" : "Encoding Characters"
                },
                {
                    "dataType" : "HD",
                    "optionality" : "O",
                    "name" : "Sending Application"
                },
                {
                    "dataType" : "HD",
                    "optionality" : "O",
                    "name" : "Sending Facility"
                },
                {
                    "dataType" : …
Run Code Online (Sandbox Code Playgroud)

database json mongodb nosql meteor

6
推荐指数
1
解决办法
6397
查看次数

Mongoose 嵌套数组 $push

我正在尝试$push进入嵌套数组Object,但它似乎不起作用。我不确定我做错了什么。

我的数据库是这样的:

{
  customers: {
    name: String,
    address: String,
    proj_managers: [
      {
        name: String,
        username: String,
        projects: [
          name: String,
          tags: [
            {
              tag_no: Number,
              tag_id: String,
              time: String,
              product_id: String,
              urls: [
                url: String,
                count: Number
              ],
              gps: String,
              deactivate: Boolean
            }
          ]
        ]
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我想做的是将$push标签数组放入tags特定的project. 我的后端使用GraphQL

/index.js

// GraphQL schema
import schema from './schema'
// Mongoose Models
import Customer from './models/Customer'
import …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query

4
推荐指数
1
解决办法
3797
查看次数

更新数组mongodb中的嵌套数组

我有以下mongodb文档结构:

[
    {
        "_id": "04",
        "name": "test service 4",
        "id": "04",
        "version": "0.0.1",
        "title": "testing",
        "description": "test",
        "protocol": "test",
        "operations": [
            {
                "_id": "99",
                "oName": "test op 52222222222",
                "sid": "04",
                "name": "test op 52222222222",
                "oid": "99",
                "description": "testing",
                "returntype": "test",
                "parameters": [
                    {
                        "oName": "Param1",
                        "name": "Param1",
                        "pid": "011",
                        "type": "582",
                        "description": "testing",
                        "value": ""
                    },
                    {
                        "oName": "Param2",
                        "name": "Param2",
                        "pid": "012",
                        "type": "58222",
                        "description": "testing",
                        "value": ""
                    }
                ]
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

我已经能够使用$ elemMatch来更新操作中的字段,但是当我尝试对参数执行相同的操作(修改)时,它似乎不起作用.我想知道我应该尝试哪种其他方法,以便能够成功更新特定参数中的字段,通过其pid查找它.

我目前拥有且不起作用的更新代码如下所示:

var oid …
Run Code Online (Sandbox Code Playgroud)

arrays api mongodb node.js

3
推荐指数
1
解决办法
1万
查看次数

Node.js - Mongoose - 使用req.body中的所有值更新嵌套数组

我有一个看起来像这样的对象.

{
  _id: '577fe7a842c9b447',
  name: 'Jacob\'s Bronze Badges',
  competitors: [
    {
      _id: '577fe7a842c9bd6d',
      name: 'Peter\'s Silver Badges',
      sites: [
        {
          _id: '577fe7a842c9bd6d',
          name: 'Facebook',
          url: 'fb.com/peter'
        },
        {
          _id: '577fe7a842c9bd6d'
          name: 'Google',
          url: 'google.com/peter'
        }
      ]
    },
    {
      _id: '599fe7a842c9bd6d',
      name: 'Paul\'s Gold Badges',
      sites: [
        {
          '_id': '577fe7a842c9bd6d',
          name: 'Facebook',
          url: 'fb.com/paul'
        },
        {
          _id: '577fe7a842c9bd6d',
          name: 'Google',
          url: 'google.com/paul'
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我的目标是引用competitors数组并使用所有值更新内部的项目req.body.我基于这个代码关闭的这个答案,以及该另一个.

Location.update(
  { 'competitors._id': req.params.competitorId, }, …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js express

3
推荐指数
1
解决办法
6944
查看次数

Mongodb 3.6.0-rc3数组过滤器不起作用?

我正在尝试在mongodb 3.6.0-rc3中使用数组过滤器,就像在doc示例中一样,但是没有使任何行受到影响并且没有错误。

示例已简化。我知道可以使用$作为位置运算符来完成此操作,但我打算将此功能用于两级嵌套数组。

db.getCollection('books').update({},
    {
        $set: { "authors.$[element].firstName": "Joe" }
    },
    {
        arrayFilters: [ { element: { "_id": ObjectId("some_id") } } ],
        multi: true
    })
Run Code Online (Sandbox Code Playgroud)

有人尝试过吗?

arrays mongodb mongodb-query

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

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

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

问题

如何"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
查看次数

$lookup 双重嵌套外部字段

我有 2 个集合:

用户

{
    id: 1,
    name: "Michael", 
    starred: [1, 2]
}
Run Code Online (Sandbox Code Playgroud)

学校

{
    id: 1,
    name: "Uni", 
    faculties: [{
        id:1000, 
        name: "faculty1", 
        subjects: [
            {id: 1, name: "sub1"},
            {id: 2, name: "sub2"},
            {id: 3, name: "sub3"}
        ]
    }]
}
Run Code Online (Sandbox Code Playgroud)

现在,在我的用户集合中,我想查找并收集每个主题对象,其 ID 在已加星标中找到。IE。starred: [1,2]包含id我想要的主题。

所以最终结果应该返回

[{id: 1, name: sub1},{id: 2, name: sub2}]
Run Code Online (Sandbox Code Playgroud)

我目前正在使用 whis 聚合管道

{$match: {name: 'Michael'}},
{$unwind: "$faculties"},
{$unwind: "$faculties.subjects"},
{$lookup:
  {
     from: 'schools',
     localField: 'starred',
     foreignField: 'faculties.subjects.id',
     as: 'starredSubjects'
   }
},
{$project: …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

更新了Mongoose更新嵌套数组元素

我有以下架构

UserSchema: Schema = new Schema({
  username: String,
  password: String,
  chat: [{
    lastSeen: { type: Date, default: Date.now },
    room: {
        type: Schema.Types.ObjectId, ref: 'ChatRoom'
    }
  }],
});
Run Code Online (Sandbox Code Playgroud)

我想对进行静态方法UserSchema,以便chat[i].lastSeen通过给定更新room _id

UserSchema.statics.lastSeen = 
function lastSeen(username: string, roomId: number, date: Date) {
   this.update({
    username: username,
    chat: {
        $elemMatch: {
            'room._id': roomId
        }
    }},
    {
        $set: { 'chat.$[???].lastSeen': date}
    });
}
Run Code Online (Sandbox Code Playgroud)

我找不到如何通过他的元素获取chat元素room._id然后进行更新。有什么帮助吗?

编辑

我的案子与建议的重复案类似但不相同,因为那里的人知道所有ids,而我不知道chat._id

javascript mongoose mongodb node.js typescript

0
推荐指数
1
解决办法
811
查看次数