在本文中,我们将给您介绍关于如何重命名MongoDB中所有文档的字段?的详细内容,并且为您解答mongodb重命名数据库的相关问题,此外,我们还将为您提供关于django–如何重命名带注释的查询的字段
在本文中,我们将给您介绍关于如何重命名 MongoDB 中所有文档的字段?的详细内容,并且为您解答mongodb 重命名数据库的相关问题,此外,我们还将为您提供关于django – 如何重命名带注释的查询的字段?、golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决、mongodb / mongoose findMany-查找ID在数组中列出的所有文档、MongoDB 管理:如何重命名数据库的知识。
本文目录一览:- 如何重命名 MongoDB 中所有文档的字段?(mongodb 重命名数据库)
- django – 如何重命名带注释的查询的字段?
- golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决
- mongodb / mongoose findMany-查找ID在数组中列出的所有文档
- MongoDB 管理:如何重命名数据库
如何重命名 MongoDB 中所有文档的字段?(mongodb 重命名数据库)
假设我在 MongoDB 中有一个包含 5000 条记录的集合,每条记录都包含以下内容:
{
"occupation":"Doctor","name": {
"first":"Jimmy","additional":"Smith"
}
有没有一种简单的方法可以将所有文档中的“附加”字段重命名为“最后一个”?我在文档中看到了$rename运算符,但我不太清楚如何指定子字段。
django – 如何重命名带注释的查询的字段?
a = Mainfee.objects.values('collected_by__username'). distinct().annotate(Sum('amount'))
结果看起来像这样
[{'collected_by__username': u'maindesk','amount__sum': 800}]
如何将第一个键重命名为b,将第二个键重命名为b?
我尝试了以下内容
m = Mainfee.objects.extra(select = {'a':'collected_by__username'}).values('a').distinct(). annotate(Sum('amount'))
收到了这个
DatabaseError: no such column: collected_by__username
我也试过了
m = Mainfee.objects.extra(select = {'a':'collected_by__username'}).values('collected_by__username').distinct(). annotate(Sum('amount'))
得到了
[{'collected_by__username': u'maindesk','amount__sum': 800}]
PS:我也想重命名第二个字段
解决方法
m = Mainfee.objects.values('collected_by__username').annotate(b=Sum('amount')) [{'collected_by__username': u'maindesk','b': 800}]
但是,没有快速简便的方法来重命名相关字段.你可以用Python转换它,但你必须问自己这是否真的有必要:
m = Mainfee.objects.values('collected_by__username').annotate(b=Sum('amount')) m = [{'a': x['collected_by__username'],'b': x['b']} for x in m]
或者这可能稍快一点:
m = Mainfee.objects.values_list('collected_by__username').annotate(Sum('amount')) m = [{'a': x[0],'b': x[1]} for x in m]
这两种方法当然都会强制评估整个查询集,并且不允许通过queryset的方法进一步过滤/排序等.
另请注意,当您将values()或values_list()与annotate()一起使用时,对distinct()的调用是多余的.
golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决
dadream · 2015-12-22 03:00:00 · 1541 次点击 · 预计阅读时间 1 分钟 · 大约1分钟之前 开始浏览
问题描述
当使用mgo操作mongodb时,遇到数据插入正常,但是在数据库查看时只能看到objectid被插入了;读取的时候,可以查询到记录,但是读入对象时,却所有的值均为0或者空的情况。
mongodb文档结构:
{
"_id" : ObjectId("502fbbd6fec1300be858767e"),
"lastName" : "Seba",
"firstName" : "Jun",
"inserted" : ISODate("2012-08-18T15:59:18.646Z")
}
golang结构:
type Person struct {
_id bson.ObjectId
firstName string
middleName string
lastName string
inserted time.Time
}
原因
当跨包使用interface定义的字段时,只有一下两种情形,才拥有访问权限。(详见go语言规范)
Exported identifiers
An identifier may be exported to permit access to it from another package. An identifier is exported if both:
- the first character of the identifier''s name is a Unicode upper case letter (Unicode class "Lu"); and
- the identifier is declared in the package block or it is a field name or method name.
All other identifiers are not exported.
解决方案
将对象字段的首字母大写。如下所示:
type Person struct {
Id bson.ObjectId "_id"
FirstName string "firstName"
MiddleName string "middleName,omitempty"
LastName string "lastName"
Inserted time.Time "inserted"
}
mongodb / mongoose findMany-查找ID在数组中列出的所有文档
我有一个_ids数组,我想相应地获取所有文档,最好的方法是什么?
就像是 …
// doesn''t work ... of course ...model.find({ ''_id'' : [ ''4ed3ede8844f0f351100000c'', ''4ed3f117a844e0471100000d'', ''4ed3f18132f50c491100000e'' ]}, function(err, docs){ console.log(docs);});
该数组可能包含数百个_id。
答案1
小编典典find
mongoose中的函数是对mongoDB的完整查询。这意味着您可以使用方便的mongoDB $in
子句,该子句的工作方式与SQL版本相同。
model.find({ ''_id'': { $in: [ mongoose.Types.ObjectId(''4ed3ede8844f0f351100000c''), mongoose.Types.ObjectId(''4ed3f117a844e0471100000d''), mongoose.Types.ObjectId(''4ed3f18132f50c491100000e'') ]}}, function(err, docs){ console.log(docs);});
即使对于包含成千上万个id的数组,此方法也将很好地工作。(请参阅有效确定记录的所有者)
我建议任何与工作有关的人员通读优秀的mongoDB官方文档的mongoDB
“
高级查询”部分。
MongoDB 管理:如何重命名数据库
最近收到一个 AliCloudDB for MongoDB 的使用咨询问题,和大家分享一下,用户想对 database 进行重命名操作,但因为 MongoDB 并没有提供 renameDatabase 的命令,用户的想法是通过 copydb 来实现,先将数据库拷贝一份,然后删除老的数据库,但由于 DB 里数据很多,copydb 太耗时,想知道是否有更好的方法?
虽然 MongoDB 没有 renameDatabase 的命令,但提供了 renameCollection 的命令,这个命令并不是仅仅能修改 collection 的名字,同时也可以修改 database。
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})
上述命令实现了将 db1 下的 test1,重命名为 db2 下的 test2,这个命令只修改元数据,开销很小,有了这个功能,要实现 db1 重命名为 db2,只需要遍历 db1 下所有的集合,重命名到 db2 下,就实现了 renameDatabase 的功能,写个 js 脚本能很快的实现这个功能.
`var source = "source";
var dest = "dest";
var colls = db.getSiblingDB(source).getCollectionNames();
for (var i = 0; i < colls.length; i++) {
var from = source + "." + colls[i];
var to = dest + "." + colls[i];
db.adminCommand({renameCollection: from, to: to});
} `
张友东,阿里巴巴技术专家,主要关注分布式存储、Nosql 数据库等技术领域,先后参与 TFS(淘宝分布式文件系统)、AliCloudDB for Redis 等项目,目前主要从事 AlidCloud For MongoDB 的研发工作,致力于让开发者用上最好的 MongoDB 云服务。
关于如何重命名 MongoDB 中所有文档的字段?和mongodb 重命名数据库的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于django – 如何重命名带注释的查询的字段?、golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决、mongodb / mongoose findMany-查找ID在数组中列出的所有文档、MongoDB 管理:如何重命名数据库的相关知识,请在本站寻找。
本文标签: