Tengo una colección que se compone de algunas cadenas, objetos y una matriz. Dentro de esa matriz hay varios objetos. Estoy intentando eliminar todos los pedidos con el ID de objeto de ObjectId ("587ec66e5ed5cb0061092dbe"). Consulte a continuación el esquema y los datos relacionados. He probado de todo bajo el sol.

var campgroundSchema = new mongoose.Schema({
   name: String,
   image: String,
   description: String,
   price: String,
   author: {
      id: {
         type: mongoose.Schema.Types.ObjectId,
         ref: "User"
      },
      username: String
   },
   orders: [
      {
         type: mongoose.Schema.Types.ObjectId,
         ref: "Order"
      }
   ]
});

A continuación se muestran datos de muestra.

{ 
    "_id" : ObjectId("587ec65e5ed5cb0061092dbd"), 
    "name" : "is Forrest Cool?", 
    "price" : "", 
    "image" : "https://dsafd.com", 
    "description" : "", 
    "orders" : 
    [ 
        ObjectId("587ec66e5ed5cb0061092dbe"), 
        ObjectId("587ec6bc5ed5cb0061092dc0"), 
        ObjectId("587ec6c05ed5cb0061092dc2"), 
        ObjectId("587ec7178f628931610636dc"), 
        ObjectId("587ec71e8f628931610636de")
    ], 
    "author" : { "id" : ObjectId("587ec6145ed5cb0061092dbc"), 
    "username" : "forrest" }, 
    "__v" : 18 
}

Muchas gracias.

-2
FDRH 17 ene. 2017 a las 05:18

1 respuesta

La mejor respuesta

Para encontrar el elemento específico con particular ObjectId dentro de la matriz orders, puede usar $in.

Pruebe esto:

//orderObjectId is the object id you want to find inside orders.
Campground.find({orders : {$in : [orderObjectId]}},{'orders.$':1},function(err,result){
...
});

'orders.$':1 devolverá solo ese elemento de la matriz de pedidos

Para eliminar ese pedido en particular,

//_id is optional, you can query using orderID also.
Campground.update({ 
    _id :someObjectId, orders : {$in : [orderObjectId]}
},{
    $pull : {order : orderObjectId}
},function(err,result){
                     ...
});

Actualización: De acuerdo con su comentario, parece que tiene problemas para usar esto.

Prueba esto:

//if you are receiving orderId as string, convert string to ObjectId
var orderId = mongoose.Schema.Types.ObjectId("587d78b8e898d1e732b3888a");

Campground.find({"orders": {$in : [orderId]}},function(err, result){ 
   if(err){ 
       console.log(err); 
   } else { 
       console.log("FOUND RESULT: " + result); 
   } 
});

Espero que esto ayude.

0
Ravi Shankar Bharti 17 ene. 2017 a las 21:49
Gracias, Ravi. Sin embargo, todavía no puedo entenderlo. Como puede ver, soy nuevo en node / js / mongo. ¿Puede proporcionar algo que pueda copiar y pegar fácilmente en mi código para ver si eso ayuda? Estoy buscando el pedido que tiene el objectId de "587d78b8e898d1e732b3888a".
 – 
FDRH
17 ene. 2017 a las 21:28
Cual es el problema al que te enfrentas?
 – 
Ravi Shankar Bharti
17 ene. 2017 a las 21:28
Campground.find ({"orders._id": "587d78b8e898d1e732b3888a"}, function (err, result) {if (err) {console.log (err);} else {console.log ("RESULTADO ENCONTRADO:" + resultado) ;}});
 – 
FDRH
17 ene. 2017 a las 21:29
¿Cuál es el problema?
 – 
Ravi Shankar Bharti
17 ene. 2017 a las 21:30
No use una cadena simple para consultar ObjectId, le dará un error
 – 
Ravi Shankar Bharti
17 ene. 2017 a las 21:32