Есть ли простой способ скопировать данные коллекции в другое приложение MEAN? - PullRequest
0 голосов
/ 10 января 2020

В настоящее время я внедряю панель администратора для приложения для онлайн-покупок. Я хочу реализовать метод для удаления пользователя и временного сохранения удаленных пользовательских данных в другой коллекции.

(Copy_userdata-> Сохранить в другой коллекции) -> удалить исходные данные)

В качестве примера данные моих пользователей, которые в настоящее время доступны в коллекции, называются пользователями, и после удаления этого пользователя данные конкретного пользователя должны быть доступны в другой коллекции, скажем, в коллекции delete_users. Есть ли простой способ сделать это? Спасибо!

Ответы [ 4 ]

3 голосов
/ 10 января 2020

Вы будете изменять часть кода, но это основные c logi c,

Использовать агрегацию для коллекций копий через. См. здесь для функции агрегирования с использованием mon go клиент

Итак, функция выглядит следующим образом

public aggregation(collectionName: string, pipelines: Object[]): Promise<Array<any>>
    {
        return new Promise((resolve, reject) =>
        {
        let cursor: mongodb.AggregationCursor<any> = null;

             //Here you will use getCollection method on your own to fetch the collection
            this.getCollection(collectionName)
                .then((collection: mongodb.Collection) =>
                {
                    cursor = collection.aggregate(pipelines);

                    return cursor.toArray();
                })
                .then((result: Array<any>) =>
                {
                    return resolve(result);
                })
                .catch((error: any) =>
                { 
                    //error//
                });

    }

    public dropCollection(collectionName: string): Promise<any>
    {
        return new Promise((resolve, reject) =>
        {

           this.getCollection(collectionName)
                .then((collection: mongodb.Collection) =>
                {
                    collection.drop((err: Error, result: any) =>
                    {

                        if (err)
                        {
                            return reject(DataDropError);
                        }

                        return resolve(result);
                    });
                })
                .catch(reject);
        });
    }

     public async backupAndDrop()
    {
        const Object = [ { $match: {} }, { $out: "DeletedCollection" } ];

        try
        {
            await this.aggregationPipeline("originalCollection", Object);
            await  this.dropCollection("originalCollection");

        }
        catch (e)
        {
            throw e;
        }

    }

Также попробуйте запустить это на своей оболочке mon go:

db.originalCollection.aggregate([ { $match: {} }, { $out: "Backup" } ])
0 голосов
/ 10 января 2020

Вы можете сделать что-то вроде этого ...

    Client.connect(connection_string, function(err, db) {
       if(err){
           console.log(err);
       }
       else{
           db.collection(CollectionA).find().forEach(function(d){ db.collection(CollectionB).insert(d); });
        }

Попробуйте, если это работает.

Это также может помочь: Как правильно повторно использовать соединение с Mongodb через NodeJs приложение и модули

0 голосов
/ 10 января 2020

Сначала можно найти удаляемую запись и создать новую запись с этими данными в новой коллекции, а затем удалить запись.

db.collection(CollectionA).findOne({userIdTODelete}, function(err, res){ 
         db.collection(CollectionB).insertOne(res, function() { 
            db.collection(CollectionA).deleteOne({userIdTODelete}); 
    }) 
}); 
0 голосов
/ 10 января 2020

Почему бы вам не добавить флаг типа isDeleted , который по умолчанию имеет значение false, а затем сделать его истинным при удалении пользователя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...