Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDb在集合中选择不同的对象类型_Mongodb - Fatal编程技术网

MongoDb在集合中选择不同的对象类型

MongoDb在集合中选择不同的对象类型,mongodb,Mongodb,我有一个叫做用户的MongoDB集合。 我事先不知道对象类型。 此集合至少有3种不同类型的结构化对象。例如: 类型1: { "_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f0", "userid" : 6711, "registerDate" : "2014-10-28T14:42:06", "lastLoginDate" : "2014-10-28T14:42:06", } 第2类: { "_id" : "9e1736d4-f3a1-47ed-bb5

我有一个叫做用户的MongoDB集合。 我事先不知道对象类型。 此集合至少有3种不同类型的结构化对象。例如:

类型1:

{
"_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f0",
"userid" : 6711,
"registerDate" : "2014-10-28T14:42:06",
"lastLoginDate" : "2014-10-28T14:42:06",

}
第2类:

{
"_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f1",
"userid" : 6712,
"email" : "johndoe@example.com",
"username" : "john doe",

}
第3类:

{
"_id" : "9e1736d4-f3a1-47ed-bb51-3318129664f2",
"userid" : 63713,
"city" : "orange",
"state" : "new york",
"country" : "US",
}
如何从集合中的每种类型中获取不同的类型或第一个对象?
所以,如果我有100万用户,上面有3种不同的结构,我希望得到3个结果。

添加一个字段类型来标识文档的类型。
然后使用来根据您的意愿对结果进行分组。

针对每种类型发出查询,您可以

db.c.findOne({registerDate: {$existed: true}});
db.c.findOne({email: {$existed: true}});
db.c.findOne({city: {$existed: true}});

这应该是非常快速和简单的

很遗憾,我没有对数据库的只读修改权限。我就是不能通过查询来完成它?对于数百万用户来说,没有有效的方法来完成它。如果可以创建新集合,则可以通过映射在新集合中创建代理类型字段,方法是将文档字段的排序名称关联起来,然后按此字段分组。您仍然需要一些类型字段,但您可以创建一个新集合。但它效率很低。谢谢,但问题是我事先不知道对象类型:@Teoman shipahi,噢,我的上帝。那么,需要对差异有一个明确的定义。我会在描述中加上它。@Teoman shipahi:我认为基于你有限的信息,这很难做到。例如,{a:1}是第一种类型,{a:1,b:2}是第二种类型,{a:1,b:{a:1,b:2}是第三种类型,等等。您必须检索整个文档并进行相同的结构比较,这在一百万空间中效率非常低。但作为您提供的示例,提示字段上的任何两种类型之间都没有交集,这将更有效。这只是我的意见,也许有人可以分享其他有效的方式来帮助。