Mongodb 在集合中查找具有匹配字段的文档,并从匹配的文档中添加新字段
我收藏了Mongodb 在集合中查找具有匹配字段的文档,并从匹配的文档中添加新字段,mongodb,Mongodb,我收藏了汽车,注册,汽车规格 我需要创建两个新集合 cars\u registrations-这将RegNo从registrations添加到cars,用于具有相同StreetNo和HouseNo的文档,丢弃不匹配的文档 cars\u registrations\u spec-这将CarSpec从car\u specs添加到cars\u registrations收集具有相同StreetNo和HouseNo的文档 从控制台执行此操作的最有效方式是什么?我在cars集合中有500K个文档,在reg
汽车
,注册
,汽车规格
我需要创建两个新集合
cars\u registrations
-这将RegNo
从registrations
添加到cars
,用于具有相同StreetNo
和HouseNo
的文档,丢弃不匹配的文档cars\u registrations\u spec
-这将CarSpec
从car\u specs
添加到cars\u registrations
收集具有相同StreetNo
和HouseNo
的文档cars
集合中有500K个文档,在registrations
集合中有50K个文档
汽车:
[
{ "StreetNo": 321, "HouseNo": "12", "Car": "camry" },
{ "StreetNo": 321, "HouseNo": "13", "Car": "camry" },
{ "StreetNo": 323, "HouseNo": "12", "Car": "accord" },
{ "StreetNo": 324, "HouseNo": "15", "Car": "Sunny" }
]
[
{ "StreetNo": 321, "HouseNo": "12", "RegNo": "1122" },
{ "StreetNo": 321, "HouseNo": "13", "RegNo": "1123" },
{ "StreetNo": 323, "HouseNo": "12", "RegNo": "1124" },
]
注册:
[
{ "StreetNo": 321, "HouseNo": "12", "Car": "camry" },
{ "StreetNo": 321, "HouseNo": "13", "Car": "camry" },
{ "StreetNo": 323, "HouseNo": "12", "Car": "accord" },
{ "StreetNo": 324, "HouseNo": "15", "Car": "Sunny" }
]
[
{ "StreetNo": 321, "HouseNo": "12", "RegNo": "1122" },
{ "StreetNo": 321, "HouseNo": "13", "RegNo": "1123" },
{ "StreetNo": 323, "HouseNo": "12", "RegNo": "1124" },
]
汽车注册
[
{ "StreetNo": 321, "HouseNo": "12", "Car": "camry", "RegNo": "1122" },
{ "StreetNo": 321, "HouseNo": "13", "Car": "camry", "RegNo": "1123" },
{ "StreetNo": 323, "HouseNo": "12", "Car": "accord", "RegNo": "1124" }
]
[
{ "StreetNo": 321, "HouseNo": "12", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 321, "HouseNo": "13", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 323, "HouseNo": "12", "CarSpec": {"cyl": "6", "gear": "7"} }
]
var results = db.registrations.find({}, {_id: 0}).toArray();
for( var i = 0; i < results.length; i++) {
var car = db.car.findOne({$and: [{StreetNo: results[i]["StreetNo"]},
{HouseNo: results[i]["HouseNo"]}] }, {_id: 0});
if(car && results[i]["RegNo"]) {
car["RegNo"] = results[i]["RegNo"]
db.cars_registrations.insertOne(car);
}
}
汽车规格
[
{ "StreetNo": 321, "HouseNo": "12", "Car": "camry", "RegNo": "1122" },
{ "StreetNo": 321, "HouseNo": "13", "Car": "camry", "RegNo": "1123" },
{ "StreetNo": 323, "HouseNo": "12", "Car": "accord", "RegNo": "1124" }
]
[
{ "StreetNo": 321, "HouseNo": "12", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 321, "HouseNo": "13", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 323, "HouseNo": "12", "CarSpec": {"cyl": "6", "gear": "7"} }
]
var results = db.registrations.find({}, {_id: 0}).toArray();
for( var i = 0; i < results.length; i++) {
var car = db.car.findOne({$and: [{StreetNo: results[i]["StreetNo"]},
{HouseNo: results[i]["HouseNo"]}] }, {_id: 0});
if(car && results[i]["RegNo"]) {
car["RegNo"] = results[i]["RegNo"]
db.cars_registrations.insertOne(car);
}
}
车辆注册\u规格
[
{ "StreetNo": 321, "HouseNo": "12", "Car": "camry", "RegNo": "1122", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 321, "HouseNo": "13", "Car": "camry", "RegNo": "1123", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 323, "HouseNo": "12", "Car": "accord", "RegNo": "1124", "CarSpec": {"cyl": "6", "gear": "7"} }
]
下面是一种尝试的方法。但是,这需要花费很长时间才能完成集合中文档的数量-这样做的正确mongodb方法是什么
用于汽车注册
[
{ "StreetNo": 321, "HouseNo": "12", "Car": "camry", "RegNo": "1122" },
{ "StreetNo": 321, "HouseNo": "13", "Car": "camry", "RegNo": "1123" },
{ "StreetNo": 323, "HouseNo": "12", "Car": "accord", "RegNo": "1124" }
]
[
{ "StreetNo": 321, "HouseNo": "12", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 321, "HouseNo": "13", "CarSpec": {"cyl": "4", "gear": "5"} },
{ "StreetNo": 323, "HouseNo": "12", "CarSpec": {"cyl": "6", "gear": "7"} }
]
var results = db.registrations.find({}, {_id: 0}).toArray();
for( var i = 0; i < results.length; i++) {
var car = db.car.findOne({$and: [{StreetNo: results[i]["StreetNo"]},
{HouseNo: results[i]["HouseNo"]}] }, {_id: 0});
if(car && results[i]["RegNo"]) {
car["RegNo"] = results[i]["RegNo"]
db.cars_registrations.insertOne(car);
}
}
var results=db.registrations.find({},{u id:0}).toArray();
对于(var i=0;i
我的问题是,这需要很长的时间-很多很多小时-我的猜测是,findOne
与$和
需要很多时间-对于我来说,在一个拥有500K文档的汽车收藏和拥有50K文档的注册收藏上完成这项工作需要很多小时。这通常会花费这么多时间吗?您需要使用聚合框架。您需要使用聚合框架。