标签: mongodb-update

MongoDB将来自两个字段的字符串连接到第三个字段

如何连接两个字段中的值并将其放入第三个字段中,值为字符串.我试过这个:

db.collection.update({"_id" : { $exists : true }},
                     {$set: {column_2:{$add:['$column_4',
                                             '$column_3']}}},
                     false, true)
Run Code Online (Sandbox Code Playgroud)

虽然似乎不起作用,但是抛出not ok for storage.我也试过这个:

db.collection.update({"_id" : { $exists : true }},
                     {$set: {column_2:{$add:['a',
                                             'b']}}},
                     false, true)
Run Code Online (Sandbox Code Playgroud)

但即使这显示同样的错误not ok for storage.

我想只在mongo服务器上连接而不是在我的应用程序中连接.

string-concatenation mongodb mongodb-query mongodb-update aggregation-framework

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

在对数组字段执行更新时,无法使用字符串字段名[$]附加到数组

rowsI我正在尝试对记录数组中的每个字段执行mongodb更新.

示例架构如下:

{
    "_id" : ObjectId("508710f16dc636ec07000022"),
    "summary" : "",
    "uid" : "ABCDEF",
    "username" : "bigcheese",
    "name" : "Name of this document",
    "status_id" : 0,
    "rows" : [
        {
            "score" : 12,
            "status_id" : 0,
            "uid" : 1
        },
        {
            "score" : 51,
            "status_id" : 0,
            "uid" : 2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够执行这样的单个更新:

db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false)
Run Code Online (Sandbox Code Playgroud)

但是,我正在努力如何执行更新,将所有数组记录更新status_id为1(例如).

以下是我想象它应该如何工作:

db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true)
Run Code Online (Sandbox Code Playgroud)

但是我得到错误:

无法使用字符串字段名称附加到数组[$]

我已经尝试了一段时间没有运气.有什么指针吗?

mongodb mongodb-update

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

更新/删除MongoDB集合中的子文档

注意:请使用mongodb shell执行代码.

假设我有一份学生证件,如下所示

{
    "_id" : 4,
"grades" : [
    {
        "grade" : 80,
        "mean" : 75,
        "std" : 8
    },
    {
        "grade" : 85,
        "mean" : 90,
        "std" : 5
    },
    {
        "grade" : 85,
        "mean" : 90,
        "std" : 5
    },
    {
        "grade" : 85,
        "mean" : 95,
        "std" : 6
    },
    {
        "grade" : 90,
        "mean" : 85,
        "std" : 5
    }
]
}
Run Code Online (Sandbox Code Playgroud)

我们有两个问题:

问题1:假设你想用_id = 4 && grades.grade = 85 && grades.std = …

mongodb mongodb-query mongodb-update

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

如何在MongoDB中向对象添加键值对

如果我有一个具有以下基本结构的文档:

{
  ...
  Monday: { a:1, b:2 },
  Tuesday: { c:3, d:4 }
  ...
}
Run Code Online (Sandbox Code Playgroud)

我能够"推"一个额外的关键:价值对是周一的价值吗?结果将是:

{
  Monday: { a:1, b:2, z:8 },
  Tuesday: { c:3, d:4 }
  ...
}
Run Code Online (Sandbox Code Playgroud)

$push操作似乎只对数组.

mongodb mongodb-update

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

使用Upsert更新为true时未设置默认值

我为用户提供以下模型:

var UserSchema = new mongoose.Schema({

    name: String,
    dob: Date,
    sex: String,
    photo: String,
    email: {type: String, index: {unique: true, required: true}},
    created: {type: Date, default: Date.now}
});

var User = mongoose.model('Users', UserSchema);
Run Code Online (Sandbox Code Playgroud)

如您所见,“创建”字段采用当前日期的默认值,以便在创建新用户时自动设置该日期。

发布用户详细信息时,我使用以下查询:

User.findOneAndUpdate({email: user.email}, user, {upsert: true}, function (err, user) {
            if (err) {
                return callback (err);
            } else {
                callback(null, user);
            }
        });
Run Code Online (Sandbox Code Playgroud)

使用findOneAndUpdatewith 的目的upsert: true是返回一个现有的配置文件,或创建一个新的配置文件。它还根据发布的数据更新所有字段。

但是,created即使未发布创建的字段,该字段也会每次都使用当前日期进行更新。如何确保仅将该字段设置一次?

编辑

数据库中的示例对象:

{
    "_id" : ObjectId("54620b38b431d48bce7cab81"),
    "email" : "someone@google.com",
    "__v" : 0,
    "name" …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongodb-update

4
推荐指数
2
解决办法
3477
查看次数

MongoDB $ pull查询不会删除和更新现有记录

我主要担心的是在mongodb文档中他们使用$elemMatch命令进行查找并从数组中提取元素,但是当我使用时这不起作用.我的文档结构是

{
"_id" : ObjectId("55dea445c3ad8cac03a7ed8e"),
"email" : "james@user.com",
"groups" : [ 
    {
        "_id" : ObjectId("55dea4a4c3ad8c8005a7ed8f"),
        "name" : "All Group"
    }
]}
Run Code Online (Sandbox Code Playgroud)

我想使用mongodb查询从文档中删除组.我的查询是:

db.users.update({"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
{$pull: {"groups": {$elemMatch: {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}}})
Run Code Online (Sandbox Code Playgroud)

执行查询后,用户文档未更新,组值仍然存在.我关注mongodb文档:http://docs.mongodb.org/v2.6/reference/operator/update/pull/

mongodb mongodb-query mongodb-update

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

Mongo DB文档的深度更新

我在Mongo DB 3.0文档中有以下文档结构:

{
    id: "ID",
    name: "NAME",
    items:[
        {
            id:"100",
            name:"Item Name",
            fields:[
                {a:"field 1", b:44},
                {a:"field 2", b:56},
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我需要将"字段2"更新为值72,以便结果如下:

{
    id: "ID",
    name: "NAME",
    items:[
        {
            id:"100",
            name:"Item Name",
            fields:[
                {a:"field 1", b:44},
                {a:"field 2", b:72},
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-update

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

在 mongodb 中的字符串数组中查找并替换

我正在使用 MongoDB v4.4。我的文档结构如下所示:

{
  _id: ObjectId("..."),
  photos: ["image1.png", "image2.png"]
},
{
  _id: ObjectId("..."),
  photos: ["image3.png", "another_image.png, image5.jpg"]
},
{
  _id: ObjectId("..."),
  photos: ["image_name.jpg", "image2.jpg"]
},

Run Code Online (Sandbox Code Playgroud)

我正在尝试将包含“.png”的所有字符串更改为“.jpg”。

我已经尝试过以下方法:

db.users.updateMany({
  photos: { $regex: /.png/ }
}, [{
  $set: {
    "photos.$[]": { 
      $replaceOne: { 
        input: "photos.$[]", find: ".png", replacement: ".jpg" 
      } 
    }
  }
}])
Run Code Online (Sandbox Code Playgroud)

这会返回错误:

MongoServerError: Invalid $set :: caused by :: FieldPath field names may not start with '$'.
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query mongodb-update aggregation-framework

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

MongoDB - 如何向数组中的所有对象添加字段

我有一个文档,其中包含一个名为 的字段info,并且 info 内部有一个名为 的字段datadata是一个对象数组。我想使用updateManyisActive: false为 data 中的每个对象添加一个新的布尔字段。

这就是现在的样子

{ 
    info: {
        data: [{
                "name": "Max"
            },
            {
                "name": "Brian"
            },
            ...
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我要的:

{ 
    info: {
        data: [{
                "name": "Max",
                "isActive": false
            },
            {
                "name": "Brian",
                "isActive": false
            },
            ...
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么做?

mongodb nosql mongodb-query mongodb-update

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

Mongo DB 中 UpdateOne() 和 findOneAndUpdate 方法之间的区别

MongoDB中的方法UpdateOne()和方法有什么区别?findOneAndUpdate()我似乎无法理解他们的差异。如果可以使用使用UpdateOne()and 的演示示例,将不胜感激。findOneAndUpdate

insert-update mongodb mongodb-query mongodb-update

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