Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 使用Node.jS驱动程序在MongoDB中迭代多个集合并比较结果_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 使用Node.jS驱动程序在MongoDB中迭代多个集合并比较结果

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

我在MongoDB数据库中有两个收藏:“照片”和“相册”

相册集合中的每个文档都包含一个“images”属性,该属性包含一个ID数组,这些ID是返回照片集合的键

使用Node.js驱动程序,我需要遍历相册集合并删除孤立图像,即不在任何相册中的图像

我似乎不明白。。。这是我写的代码

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
数组中未提及的所有文档


只有在完成所有操作后,才能关闭数据库连接。

错误是什么?看起来您的“开始长度”/“结束长度”部分存在一些异步问题,但这不应影响它是否工作。