Documento como este
{
"_id" : ObjectId("5db65eb2a2f3a61fe88e162a"),
"devicesCxt" : [
{
"deviceId" : "1232",
"userAgent" : "PostmanRuntime/7.19.0",
"online" : false,
"_id" : ObjectId("5db65eb2a2f3a61fe88e162c"),
"loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
}
],
}
Quiero agregar esto
{
"deviceId" : "1233",
"userAgent" : "PostmanRuntime/7.19.0",
"online" : false,
"_id" : ObjectId("5db65eb2a2f3a61fe88e162b"),
"loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
}
Quiero algo como esto
{
"_id" : ObjectId("5db65eb2a2f3a61fe88e162a"),
"devicesCxt" : [
{
"deviceId" : "1232",
"userAgent" : "PostmanRuntime/7.19.0",
"online" : false,
"_id" : ObjectId("5db65eb2a2f3a61fe88e162c"),
"loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
},
{
"deviceId" : "1233",
"userAgent" : "PostmanRuntime/7.19.0",
"online" : false,
"_id" : ObjectId("5db65eb2a2f3a61fe88e162b"),
"loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
}
],
}
Si deviceId: 1232
no lo permite, de lo contrario deviceId: 1233
puede tener éxito.
No se puede tener el mismo objeto para deviceId
deviceId
debe mantenerse único en la matriz.
¿Cómo puedo hacer esto?
3 respuestas
Podría tener una consulta de actualización condicional para evitar la adición de documentos al campo devicesCxt
cuando el deviceId
del objeto entrante ya está presente. $push
Consulta Mongo:
const incomingDoc = {
deviceId: "1233",
userAgent: "PostmanRuntime/7.19.0",
online: false,
_id: ObjectId("5db65eb2a2f3a61fe88e162b"),
loginAt: ISODate("2019-10-28T03:21:22.178+0000")
};
db.collection.update(
{
_id: idToFilterIfAny,
"devicesCxt.deviceId": { $ne: incomingDoc.deviceId }
},
{ $push: { devicesCxt: incomingDoc } }
);
ACTUALIZADO
Su esquema podría ser algo como esto:
const mySchema = new Schema({
deviceCtx: [{
deviceId : { type: String, unique: true},
userAgent : { type: String, },
online : { type: Boolean, },
loginAt : { type: Date, },
}]
});
Para agregar un nuevo elemento en la matriz:
const mySchema = await mySchema.find({ _id: "5db65eb2a2f3a61fe88e162a" });
const newDeviceId = req.body.deviceId;
mySchema.devicesCxt.push({
deviceId : newDeviceId,
userAgent : "PostmanRuntime/7.19.0",
online : false,
loginAt : new Date()
});
await mySchema.save();
Utilizar esta.
let deviceid = {
"deviceId" : "1233",
"userAgent" : "PostmanRuntime/7.19.0",
"online" : false,
"_id" : ObjectId("5db65eb2a2f3a61fe88e162b"),
"loginAt" : ISODate("2019-10-28T03:21:22.178+0000")
}
myModel.update(
{ $push: { devicesCxt: deviceid } },
);
Pero si desea agregar mongo _id a su matriz, debe definirlo en su esquema
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.