我对NoSQL世界很陌生。这是我的Mongoose架构的屏幕截图。
我需要在车辆阵列中插入,更新和删除文档。
到目前为止我尝试了什么:
添加:(工作)
Companies.findOne({'mobile' : givenMobileNumber, 'VehicleGroups.vehicle_group_id' : vehicleGroupId}, (err, res) => {
if( err || res == null) {
callback(err, res);
}else{
var len = res.VehicleGroups.length;
for(var i=0; i<len; i++)
{
if(res.VehicleGroups[i].vehicle_group_id == vehicleGroupId)
res.VehicleGroups[i].vehicles.push(data);
}
res.save(callback);
}
})
删除:(工作)
Companies.findOneAndUpdate({ mobile : givenMobileNumber, 'VehicleGroups.vehicle_group_id' : vehicleGroupId},
{ $pull : {'VehicleGroups.$.vehicles' : { 'vehicle_id' : vehicleId} } }, callback);
仍在努力更新数据。我的方法有效吗?
由于
答案 0 :(得分:1)
您可以考虑为VehicleGroups
和vehicles
设置单独的ObjectId
,并通过Companies
schema
中的VehicleGroups: [{
_id: { type: Schema.Types.ObjectId, ref: 'vehicleGroup' },
// All other properties here
vehicles: [{ type: Schema.Types.ObjectId, ref: 'vehicle' }]
}]
引用它们:< / p>
document
向VehicleGroup
schema
添加新的const newVehicleGroup = new VehicleGroup({
name: 'New Vehicle',
// Set all other fields
})
将会是这样的:
Companies
并将其添加到schema
Companies.findOneAndUpdate({
mobile : givenMobileNumber, 'VehicleGroups.vehicle_group_id' : vehicleGroupId,
{ $push: { vehicleGroups: newVehicleGroup._id } }
})
:
vehicles
由于您VehicleGroups
引用了ObjectId
和document
,因此更新该引用所需要做的就是更新相应collection
中的document
但是,如果您删除array
,则需要从Companies
collection
中的相应Deque<Map.Entry<String, RecordItemElement>> top = map.entrySet().stream()
.takeWhile(e -> !givenKey.equals(e.getKey()))
.collect(Collectors.toCollection(ArrayDeque::new));
删除其引用。
看看这种方法是否更容易实现!