gpt4 book ai didi

node.js - 在大型 Mongo 集合中,如何使用 mongoose 仅​​检索 ID(或任何其他特定属性)?

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:10 24 4
gpt4 key购买 nike

假设我有一个 Person 集合和一个 Car 集合,并且所有人都有一辆汽车,并且 Person 文档存储汽车的 ID。

在此过程中,由于后端验证不良,一些汽车已被持久保存到数据库,没有任何所有者。我想删除所有这些“孤儿”汽车。

我的方法可能不是最好的,但这里是:

exports.cleanOrphanCars = (req, res) ->
Car.find() #find all the cars
.exec(err, cars) ->
return res.send(StatusMessages.ERROR.code, { error: err }) if err?
carIds = cars.map (car) =>
#map the IDs to a new array for faster iteration
return car._id
Person.find()
.exec(err, people) ->
peoplesCarIds = (person) =>
return person.carId
for carId in carIds
found = false
for personsCarId in peoplesCarIds
if personCarId is carId
found = true
if not found
#if no Person references this car, we can remove it
Car.remove({_id : carId})

获取所有这些汽车太慢了。有没有办法直接从 mongo 获取 ID 数组,而无需在本地映射 ID?

此外,是否可以跳过预取并仅通过一个查询来删除任何孤立的Cars

最佳答案

使用Person.distinct获取所有人汽车的 _id 值数组,然后使用 $nin使用 Car.remove 删除 _id 不在该集合中的汽车:

Person.distinct('carId', function (err, ids) {
Car.remove({_id: {$nin: ids}}, function (err) { ... });
});

关于node.js - 在大型 Mongo 集合中,如何使用 mongoose 仅​​检索 ID(或任何其他特定属性)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26120952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com