如何连接两个字段中的值并将其放入第三个字段中,值为字符串。 我试过这个:
db.collection.update({"_id" : { $exists : true }},
{$set: {column_2:{$add:['$column_4',
'$column_3']}}},
false, true)
似乎不起作用,抛出not ok for storage
。我也试过这个:
db.collection.update({"_id" : { $exists : true }},
{$set: {column_2:{$add:['a',
'b']}}},
false, true)
但即使这显示相同的错误not ok for storage
。
我只想在mongo服务器上连接,而不是在我的应用程序中连接。
答案 0 :(得分:14)
您可以使用aggregate,$ project和$ concat: https://docs.mongodb.org/v3.0/reference/operator/aggregation/project/ https://docs.mongodb.org/manual/reference/operator/aggregation/concat/
这将是这样的:
db.collection.aggregate(
[
{ $project: { newfield: { $concat: [ "$field1", " - ", "$field2" ] } } }
]
)
答案 1 :(得分:1)
假设你有一个集合名称是" myData"你有这样的数据的地方
{
"_id":"xvradt5gtg",
"first_name":"nizam",
"last_name":"khan",
"address":"H-148, Near Hero Show Room, Shahjahanpur",
}
并且您想要连接字段(first_name + last_name +地址)并将其保存到"地址"像这样的领域
{
"_id":"xvradt5gtg",
"first_name":"nizam",
"last_name":"khan",
"address":"nizam khan,H-148, Near Hero Show Room, Shahjahanpur",
}
现在写查询将是
{
var x=db.myData.find({_id:"xvradt5gtg"});
x.forEach(function(d)
{
var first_name=d.first_name;
var last_name=d.last_name;
var _add=d.address;
var fullAddress=first_name+","+last_name+","+_add;
//you can print also
print(fullAddress);
//update
db.myData.update({_id:d._id},{$set:{address:fullAddress}});
})
}
答案 2 :(得分:1)
**
在我看来,这个
$concat
为我工作了...
**
db.collection.update( { "_id" : {"$exists":true} },
[ {
"$set" : {
"column_2" : { "$concat" : ["$column_4","$column_3"] }
}
}
]
答案 3 :(得分:0)
您也可以按照以下方式进行操作。
db.collectionName.find({}).forEach(function(row) {
row.newField = row.field1 +"-" +row.field2
db.collection.save(row);
});
答案 4 :(得分:0)
您可以在4.2中像这样使用$set
,它支持更新中的聚合管道。
db.collection.update(
{"_id" :{"$exists":true}},
[{"$set":{"column_2":{"$concat":["$column_4","$column_3"]}}}]
)
答案 5 :(得分:0)
以@ rebe100x的答案为基础,如@Jamby所建议的...
您可以在聚合管道中使用$ project,$ concat和$ out(或$ merge)。 https://docs.mongodb.org/v3.0/reference/operator/aggregation/project/ https://docs.mongodb.org/manual/reference/operator/aggregation/concat/ https://docs.mongodb.com/manual/reference/operator/aggregation/out/
例如:
db.collection.aggregate(
[
{ $project: { newfield: { $concat: [ "$field1", " - ", "$field2" ] } } },
{ $out: "collection" }
]
)
使用MongoDB 4.2。 。
。MongoDB 4.2添加了$ merge管道阶段,该阶段提供了集合中文档的选择性替换,而$ out将替换整个集合。您还可以选择合并而不是替换目标文档。
db.collection.aggregate(
[
{ $project: { newfield: { $concat: [ "$field1", " - ", "$field2" ] } } },
{ $merge: { into: "collection", on: "_id", whenMatched: "merge", whenNotMatched: "discard" }
]
)
在$ merge和$ out之间进行选择时,应考虑性能,并发性和一致性之间的权衡,因为$ out将通过临时集合和重命名原子地执行集合替换。< / p>
https://docs.mongodb.com/manual/reference/operator/aggregation/merge/ https://docs.mongodb.com/manual/reference/operator/aggregation/merge/#merge-out-comparison
答案 6 :(得分:-1)
db.myDB.find().forEach(function(e){db.myDB.update({"_id":e._id},{$set{"name":'More' + e.name + ' '}});
这是一个解决方案!!