如何连接两个字段中的值并将其放入第三个字段中,值为字符串.我试过这个:
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
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 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 = …
如果我有一个具有以下基本结构的文档:
{
...
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操作似乎只对数组.
我为用户提供以下模型:
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) 我主要担心的是在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/
我在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 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) 我有一个文档,其中包含一个名为 的字段info,并且 info 内部有一个名为 的字段data。data是一个对象数组。我想使用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中的方法UpdateOne()和方法有什么区别?findOneAndUpdate()我似乎无法理解他们的差异。如果可以使用使用UpdateOne()and 的演示示例,将不胜感激。findOneAndUpdate