当前位置:  开发笔记 > 编程语言 > 正文

返回MongoDB中字段的实际类型

如何解决《返回MongoDB中字段的实际类型》经验,为你挑选了3个好方法。

在MongoDB中,使用$type,可以根据字段是否与BSON数据类型匹配来过滤搜索(请参阅DOCS).

例如.

db.posts.find({date2: {$type: 9}}, {date2: 1})

返回:

{ 
    "_id" : ObjectId("4c0ec11e8fd2e65c0b010000"), 
    "date2" : "Fri Jul 09 2010 08:25:26 GMT" 
}

我需要一个查询,告诉我该字段的实际类型是什么,对于集合中的每个字段.这可能与MongoDB有关吗?



1> styvane..:

从MongoDB 3.4开始,您可以使用$type聚合运算符返回字段的类型.

db.posts.aggregate( 
    [ 
        { "$project": { "fieldType": {  "$type": "$date2"  } } } 
    ]
)

产量:

{ 
    "_id" : ObjectId("4c0ec11e8fd2e65c0b010000"), 
    "fieldType" : "string" 
}



2> Bharathiraja..:

在mongo shell中键入以下查询

  typeof db.employee.findOne().first_name

句法

 typeof db.collection_name.findOne().field_name


这将提供JS类型,该类型可能与BSON类型不同。例如,如果执行typeof db.employee.findOne()._ id,则将获得“字符串”,但BSON类型为“对象ID”。

3> Gates VP..:

好的,这里有一些可能有用的相关问题:

使用map-reduce 获取集合中的所有字段名称.

这是一个列出所有可能字段的递归版本.

希望这可以让你开始.但是,我怀疑你会遇到这个请求的一些问题.这里有两个问题:

    我找不到JSON的"gettype"函数.您可以通过查询$type,但看起来您实际上不能gettype在字段上运行函数并将其映射回BSON类型.

    字段可以包含多种类型的数据,因此您需要一个计划来处理此问题.即使不明显,Mongo也可以存储一些数字作为整数,而其他数据则在你不知道的情况下漂浮.实际上,使用PHP驱动程序,这很有可能.

因此,如果您认为可以解决问题#1,那么您应该能够使用"获取所有字段名称"稍微改变来解决问题#2 .

它可能看起来像这样:

"map" : function() { for (var key in this) { emit(key, [ typeof value[key] ]); } }
"reduce" : function(key, stuff) { return (key, add_to_set(stuff) ); }

所以基本上你会在map函数中发出keytype of key value(作为一个数组).然后从reduce函数中为每种类型添加唯一条目.

在运行结束时,您将拥有这样的数据

{"_id":[255], "name" : [1,5,8], ... }

当然,这都是很多工作,取决于你的实际问题,你可能只想确保(从你的代码)你总是放入正确的数据类型.在数据进入数据库之后查找数据类型肯定是一件痛苦的事.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有