简体   繁体   中英

Delete Array item from mongoDB collection

I am trying to do following, if anyone could help would be great help

I want to delete an item from the items array

 {
"_id" : ObjectId("56e8c56a71cfa3fbe528c91b"),
"shipping" : 6.7800000000000002,
"subTotal" : 201,
"totalCost" : 207.7800000000000011,
"order_status" : "queued",
"ordered_by" : "John Sims",
"ordered_by_id" : "56e8c50a71cfa3fbe5288a48",
"created_at" : ISODate("2016-03-16T02:31:06.723Z"),
"items" : [ 

    {
        "created_at" : "2008-12-17T11:01:23.460Z",
        "quantity" : 1,
        "country" : "Australia",
        "state" : "NSW",
        "suburb" : "Sydney",
        "location" : "Sydney,NSW,Australia",
        "longitude" : "151.1228434",
        "latitude" : "-33.7904955",
        "genre" : "Rock",
        "cost" : "67",
        "product_status" : "pending",
        "product_by" : "Paul Dirac",
        "item" : "CD",
        "cart_id" : "56e8c56271cfa3fbe528c918"
    }, 

    {
        "created_at" : "2008-12-17T11:01:23.460Z",
        "quantity" : 1,
        "country" : "Australia",
        "state" : "QLD",
        "suburb" : "Brisbane",
        "location" : "Brisbane,NSW,Australia",
        "longitude" : "151.1228434",
        "latitude" : "-33.7904955",
        "genre" : "",
        "cost" : "67",
        "product_status" : "pending",
        "product_by" : "Paul Dirac",
        "item" : "DVD",
        "cart_id" : "56e8c56571cfa3fbe528c919"
    }
 ]
} 

Based on conditions like below

// Updates an existing order in the DB.
exports.updateArray = function(req, res) {
Order.findById(req.params.id, function (err, order) {
  if (err) { return handleError(res, err); }
  if(!order) { return res.send(404); }
   order.update(
   // query 
   {

     },

   // update 
  {
    $pull:{
      items:{
        "item" : "CD"
        }
     }
    }
  );
  order.save(function (err) {
    if (err) { return handleError(res, err); }
    return res.json(200, order);
   });
 });
};

Now update code runs and remove item from items when code being executed from shell with following

db.getCollection('orders').update(
// query 
{

},

// update 
{$pull:{
    items:{
        item:'CD'
        }
    }
},

// options 
{
    "multi" : false,  // update only one document 
    "upsert" : false  // insert a new document, if no existing       document match the query 
}
 );

But when run over put or delete request, this doesn't remove the item from the items array of the specific document. If anyone could help me figure out the code needs to change to make it happen over HTTP request would be great.

Thanks

db.collection.findOneAndUpdate({_id:'56e8c56a71cfa3fbe528c91b'}, {$pull:{"items.item":"cd"}},{new:true},function(err,object{ });你可以使用 $拉入 mongodb 查询。我在 ndoe js 中的 mongoose 中使用了这个查询,它可能对我有用..

Working Solution is now this

exports.updateArray = function(req, res) {
Order.update(
 // query 
  {
   _id:req.params.id
 },

// update 
 {
   $pull:{
     items:{
        item:itemdata
        }
    }
  },function(err){
   return res.send(204);
  }
 );
 };

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM