आप मोंगोज़ो के साथ एक संग्रह से सभी दस्तावेजों को कैसे निकाल सकते हैं?


91

मुझे पता है कि आप कैसे...

  • एक भी दस्तावेज़ निकालें।
  • संग्रह स्वयं निकालें।
  • Mongo के साथ संग्रह से सभी दस्तावेजों को निकालें।

लेकिन मुझे पता नहीं है कि मोंगोज़ के साथ संग्रह से सभी दस्तावेजों को कैसे निकालना है। मैं यह करना चाहता हूं जब उपयोगकर्ता एक बटन पर क्लिक करता है। मुझे लगता है कि मुझे कुछ समापन बिंदु पर AJAX अनुरोध भेजने और समापन बिंदु को हटाने की आवश्यकता है, लेकिन मुझे नहीं पता कि समापन बिंदु पर हटाने को कैसे संभालना है।

मेरे उदाहरण में, मेरे पास एक Datetimeसंग्रह है, और जब उपयोगकर्ता एक बटन क्लिक करता है, तो मैं सभी दस्तावेजों को निकालना चाहता हूं।

एपीआई / दिनांक / index.js

'use strict';

var express = require('express');
var controller = require('./datetime.controller');

var router = express.Router();

router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.create);
router.put('/:id', controller.update);
router.patch('/:id', controller.update);
router.delete('/:id', controller.destroy);

module.exports = router;

एपीआई / दिनांक / datetime.controller.js

'use strict';

var _ = require('lodash');
var Datetime = require('./datetime.model');

// Get list of datetimes
exports.index = function(req, res) {
  Datetime.find(function (err, datetimes) {
    if(err) { return handleError(res, err); }
    return res.json(200, datetimes);
  });
};

// Get a single datetime
exports.show = function(req, res) {
  Datetime.findById(req.params.id, function (err, datetime) {
    if(err) { return handleError(res, err); }
    if(!datetime) { return res.send(404); }
    return res.json(datetime);
  });
};

// Creates a new datetime in the DB.
exports.create = function(req, res) {
  Datetime.create(req.body, function(err, datetime) {
    if(err) { return handleError(res, err); }
    return res.json(201, datetime);
  });
};

// Updates an existing datetime in the DB.
exports.update = function(req, res) {
  if(req.body._id) { delete req.body._id; }
  Datetime.findById(req.params.id, function (err, datetime) {
    if (err) { return handleError(res, err); }
    if(!datetime) { return res.send(404); }
    var updated = _.merge(datetime, req.body);
    updated.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.json(200, datetime);
    });
  });
};

// Deletes a datetime from the DB.
exports.destroy = function(req, res) {
  Datetime.findById(req.params.id, function (err, datetime) {
    if(err) { return handleError(res, err); }
    if(!datetime) { return res.send(404); }
    datetime.remove(function(err) {
      if(err) { return handleError(res, err); }
      return res.send(204);
    });
  });
};

function handleError(res, err) {
  return res.send(500, err);
}

आपको अजाक्स डिलीट के साथ एक डिलीट रूट बनाने की जरूरत है। मुझे html कोड बटन दिखाओ।

अब मैं यू की मदद कर सकता हूं .. बस एक सेकंड, मैं कोड बनाऊंगा।

कृपया मुझे html बटन दिखाएं।

@MrBearAndBear - मैंने अभी तक बटन के लिए कोड नहीं लिखा है। बटन बस समापन बिंदु के लिए एक AJAX अनुरोध प्रस्तुत करता है - मुझे केवल यह जानने की आवश्यकता है कि समापन बिंदु की संरचना कैसे करें।
एडम ज़ेरनर

मेरे उत्तर को देखें @AdamZerner

जवाबों:


148

DateTime.remove({}, callback) खाली वस्तु उन सभी से मेल खाएगी।


16
कृपया ध्यान रखें कि .remove () को अपदस्थ किया जा रहा है। Use deleteOne, deleteMany or bulkWrite instead.mongoose github.com/Automattic/mongoose/issues/6880 में
पेड्रो लूज

@PedroLuz मैंने एक साल में Mongoose का उपयोग नहीं किया है। मुझे अपना उत्तर अपडेट करने में खुशी हो रही है, लेकिन मैं अभी भी सबसे हाल के संस्करण के डॉक्स में मॉडल # हटाता हूं। आपके द्वारा लिंक की गई चर्चा कह रही है कि मानगो ने उन्हें पदावनत कर दिया है, लेकिन मानसून नहीं है। क्या कोई विशिष्ट रिलीज़ है जहाँ इसे डेप्रिसिएशन सूची में जोड़ा गया था (या एक संस्करण जिसमें इसे हटाने की उम्मीद है) ताकि मैं अपने "संस्करण xyz से पहले .." में स्पष्ट हो सकूँ?
क्रिसबजोरिन

2
हटा दिया जाता है
gazdagergo

पदावनत करना: संग्रह.समर्थन पदावनत है। इसके बजाय DeleteOne, deleteMany या बल्क वाइट का उपयोग करें। @ क्रिशबजोरिन
एंथनी


16

MongoDB में, db.collection.remove () विधि एक संग्रह से दस्तावेज़ निकालती है। आप सभी दस्तावेज़ों को एक संग्रह से निकाल सकते हैं, उन सभी दस्तावेज़ों को हटा सकते हैं जो किसी शर्त से मेल खाते हैं, या केवल एक दस्तावेज़ को निकालने के लिए ऑपरेशन को सीमित करते हैं।

स्रोत: मोंगोडब

यदि आप मोंगो शील का उपयोग कर रहे हैं, तो बस करें:

db.Datetime.remove({})

आपके मामले में, आपको आवश्यकता है:

आपने मुझे डिलीट बटन नहीं दिखाया, इसलिए यह बटन एक उदाहरण है:

<a class="button__delete"></a>

नियंत्रक को इसमें बदलें:

exports.destroy = function(req, res, next) {
    Datetime.remove({}, function(err) {
            if (err) {
                console.log(err)
            } else {
                res.end('success');
            }
        }
    );
};

अपने ग्राहक js फ़ाइल में इस ajax हटाएँ विधि को सम्मिलित करें:

        $(document).ready(function(){
            $('.button__delete').click(function() {
                var dataId = $(this).attr('data-id');

                if (confirm("are u sure?")) {
                    $.ajax({
                        type: 'DELETE',
                        url: '/',
                        success: function(response) {
                            if (response == 'error') {
                                console.log('Err!');
                            }
                            else {
                                alert('Success');
                                location.reload();
                            }
                        }
                    });
                } else {
                    alert('Canceled!');
                }
            });
        });

वहाँ एक तरीका है Mongoose के साथ ऐसा करने के लिए? मेरा स्टैक एंगुलर / एक्सप्रेस / नोड / मोंगो है। मैं कोणीय-फुलस्टैक जनरेटर का उपयोग कर रहा हूं । मुझे यकीन नहीं है कि सीधे मोंगो कमांड कैसे चलाएं, मैंने हमेशा मोंगोज़ का इस्तेमाल किया है।
एडम ज़ेरनर

क्या आप अपने मार्गों को परिभाषित करने के लिए एक्सप्रेस का उपयोग कर रहे हैं?

मैं कोणीय का उपयोग कर रहा हूं, इसलिए बटन बस है <button ng-click="clear()">Clear</button>
एडम ज़ेरनर

मुझे क्षमा करें, मैं अपना उत्तर अपडेट करता हूं .. मुझे महसूस नहीं हुआ कि आप सभी संग्रह हटाना चाहते हैं - '। यदि आप अपने कोड को मेरे साथ अपडेट करते हैं, तो हटाने की प्रक्रिया के अंत में, पृष्ठ फिर से लोड होगा।

1

MongoDB शेल संस्करण v4.2.6
नोड v14.2.0

मान लें कि आपके पास एक टूर मॉडल है: tourModel.js

const mongoose = require('mongoose');

const tourSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'A tour must have a name'],
    unique: true,
    trim: true,
  },
  createdAt: {
    type: Date,
    default: Date.now(),
  },
});
const Tour = mongoose.model('Tour', tourSchema);

module.exports = Tour;

अब आप अपने MongoDB से एक बार में सभी पर्यटन हटाना चाहते हैं, मैं दूरस्थ क्लस्टर से जुड़ने के लिए कनेक्शन कोड भी प्रदान कर रहा हूं। मैंने डिलीटमनी () का उपयोग किया है, यदि आप डिलीट करने के लिए कोई अर्जी पास नहीं करते हैं (), तो यह टूर कलेक्शन के सभी दस्तावेजों को हटा देगा।

const mongoose = require('mongoose');
const Tour = require('./../../models/tourModel');
const conStr = 'mongodb+srv://lord:<PASSWORD>@cluster0-eeev8.mongodb.net/tour-guide?retryWrites=true&w=majority';
const DB = conStr.replace('<PASSWORD>','ADUSsaZEKESKZX');
mongoose.connect(DB, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
  })
  .then((con) => {
    console.log(`DB connection successful ${con.path}`);
  });

const deleteAllData = async () => {
  try {
    await Tour.deleteMany();
    console.log('All Data successfully deleted');
  } catch (err) {
    console.log(err);
  }
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.