Javascript 使用Node.jS驱动程序在MongoDB中迭代多个集合并比较结果
我在MongoDB数据库中有两个收藏:“照片”和“相册” 相册集合中的每个文档都包含一个“images”属性,该属性包含一个ID数组,这些ID是返回照片集合的键 使用Node.js驱动程序,我需要遍历相册集合并删除孤立图像,即不在任何相册中的图像 我似乎不明白。。。这是我写的代码Javascript 使用Node.jS驱动程序在MongoDB中迭代多个集合并比较结果,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我在MongoDB数据库中有两个收藏:“照片”和“相册” 相册集合中的每个文档都包含一个“images”属性,该属性包含一个ID数组,这些ID是返回照片集合的键 使用Node.js驱动程序,我需要遍历相册集合并删除孤立图像,即不在任何相册中的图像 我似乎不明白。。。这是我写的代码 var MongoClient = require('mongodb').MongoClient; MongoClient.connect('mongodb://localhost:27017/photosharin
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/photosharing', function(err, db) {
if(err) throw err;
var images = db.collection('images');
var albums = db.collection('albums');
var myArray = [];
db.albums.count({}, function(err, count) {
if(err) throw err;
console.dir("start length of albums is " + count);
});
images.find({}).toArray(function(err, docs) {
if(err) throw err;
for (var i=1; i<=docs.length; i++) {
albums.count({"images": i}, function(err, count) {
if(err) throw err;
if ( count == 0 ) {
images.remove({images.find({ "_id": i })})
}
});
};
});
db.albums.count({}, function(err, count) {
if(err) throw err;
console.dir("end length of albums is " + count);
});
db.close();
});
var MongoClient=require('mongodb')。MongoClient;
MongoClient.connect('mongodb://localhost:27017/photosharing,函数(err,db){
如果(错误)抛出错误;
var images=db.collection('images');
var albums=db.collection('albums');
var myArray=[];
db.albums.count({},函数(err,count){
如果(错误)抛出错误;
console.dir(“相册的起始长度为”+count);
});
images.find({}).toArray(函数(err,docs){
如果(错误)抛出错误;
对于(var i=1;i,这里有一段代码,可以满足您的需要
但是,我会建议您在请求他人帮助之前尝试几次,然后再尝试几次,因为您似乎已经尝试了一种方法——没有成功,也没有尝试过其他选项,而在开发过程中,总是有很多方法实现“同一”东西
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/photosharing', function(err, db) {
if(err) throw err;
var images = db.collection('images');
var albums = db.collection('albums');
var imageIds = [ ];
var imageIdKeys = { };
albums.find({ }).toArray(function(err, data) {
if (!err) throw err;
for(var i = 0; i < data.length; i++) {
for(var n = 0; n < data[i].images.length; n++) {
if (!imageIdKeys[data[i].images[n]]) {
imageIdKeys[data[i].images[n]] = true;
imageIds.push(data[i].images[n]);
}
}
}
images.remove({ _id: { $nin: imageIds } }, function(err) {
if (!err) throw err;
db.close();
});
});
});
var MongoClient=require('mongodb')。MongoClient;
MongoClient.connect('mongodb://localhost:27017/photosharing,函数(err,db){
如果(错误)抛出错误;
var images=db.collection('images');
var albums=db.collection('albums');
var-imageIds=[];
var imageIdKeys={};
albums.find({}).toArray(函数(err,数据){
如果(!err)抛出err;
对于(变量i=0;i
它将收集图像的所有ID,防止重复ID。这也可以通过使用聚合以更好的方式完成,但我决定使用node.js逻辑来收集ID。然后它将从图像
集合中删除ID为图像ID
数组中未提及的所有文档
只有在完成所有操作后,才能关闭数据库连接。错误是什么?看起来您的“开始长度”/“结束长度”部分存在一些异步问题,但这不应影响它是否工作。