Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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
Javascript Mongoose-递归查询(从多个结果合并)_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose-递归查询(从多个结果合并)

Javascript Mongoose-递归查询(从多个结果合并),javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我使用以下通用模式来表示不同类型的信息 var Record = new Schema ( { type: {type: String}, // any string (foo, bar, foobar) value: {type: String}, // any string value o_id: {type:String} } ); 基于此架构的某些记录具有: 类型=汽车 价值=法拉利或 价值=福特 一些记录的topspeed类型值为210,但它们始终共享o_id,例如

我使用以下通用模式来表示不同类型的信息

var Record = new Schema (
{
   type: {type: String}, // any string (foo, bar, foobar)
   value: {type: String}, // any string value
   o_id: {type:String}
}
);
基于此架构的某些记录具有:

类型=汽车 价值=法拉利或 价值=福特 一些记录的topspeed类型值为210,但它们始终共享o_id,例如,相关法拉利拥有此topspeed。所以,如果法拉利拥有最高时速300,那么两项记录都有相同的o_id

当我不知道o_id时,我如何查询找到topspeed 300的法拉利

我找到的唯一解决办法是首先选择法拉利的汽车,然后在了解所有法拉利的所有o_id的情况下,使用它来寻找最佳速度

在伪代码中:

Record.find({type:"car", value:"ferrari"}, function(err, docs)
{
   var condition = [];// create array of all found o_id;
   Record.find({type:"topspeed", value:"300"}...
}
我知道某些合并或连接可能是不可能的,但是如何将这些条件链接起来以避免递归呢

编辑: 更好的例子:

假设我有一个HTML文档,其中包含具有特定id的DIV元素

现在,每个div元素可以包含不同类型的微数据项Car、Animal

每个微数据项都有不同的属性topspeed、numberOfLegs。。。根据类型,汽车具有最高速度,动物数腿

每个属性都有一些值310 kph,4个支腿

现在,我将这些微数据项保存到数据库中,但一般来说,它们包含的类型和值是不可知的,因为用户可以定义从汽车、动物到几乎任何东西的自定义模式。为此,我定义了记录模式:type由itemtype_propertyname组成,value是属性的值

我最终想查询同时包含项目法拉利和项目狗的所有DIV元素的o_id

这种通用方法的原因是允许任何人定义自定义模式和存储值的相应解析器


但我将只有一个搜索引擎来查找所有不同的模式和值组合,它们将把所有可能的模式视为一个定义。

我认为最好将共享一个o_id的所有记录合并到一个记录中。例如:

{
  _id: ObjectId(...),
  car: "ferarri",
  topspeed: 300
}

这样您就不会有这个问题,并且您的模式在速度和存储大小方面都会更加有效。这就是MongoDB的用途——异构数据可以存储在单个集合中,因为MongoDB是无模式的。如果您继续使用当前的设计,那么就没有办法避免多次往返数据库。

您能详细说明o_id代表什么吗?这是两个记录之间的关系吗?我还发现奇怪的是,您在一个键/值存储中重新创建了一个键/值存储,我认为这就是所有nosql数据库。也许对您的数据模式进行一些讨论会对我们有所帮助。谢谢,我添加了可能更好的示例