Primero familiarizado con los artículos de consulta de datos de Mongdb (2)

Tabla de contenido

Consulta avanzada

Consulta difusa (expresión regular)

Modificación avanzada

Especificar modificación de campo

Especificar consulta de campo

Operaciones de matriz

Especificar modificación de campo (tipo de matriz)

Eliminar el primer elemento de la matriz

Agregar un elemento al final

Insertar un elemento en la posición especificada de la matriz

Eliminar elementos específicos en la matriz

Operación por lotes de documentos

Actualizar varios documentos

Eliminar varios documentos

Operar documentos inexistentes

Una palabra por texto


Consulta avanzada

Consulta difusa (expresión regular)

PS Coincide con la posición final de la cadena de entrada. Si se establece la propiedad Multiline del objeto RegExp, $ también coincide con '\ n' o '\ r'. Para hacer coincidir el carácter $ en sí, use \ $.
() Marque el comienzo y el final de una subexpresión. La subexpresión se puede recuperar para su uso posterior. Para hacer coincidir estos caracteres, use \ (y \).
* Coincide con la subexpresión anterior cero o más veces. Para hacer coincidir * caracteres, use \ *.
+ Coincide con la subexpresión anterior una o más veces. Para hacer coincidir el carácter +, use \ +.
. Coincide con cualquier carácter individual excepto el carácter de nueva línea \ n. Para hacer coincidir., Use \ ..
[ Marque el comienzo de una expresión entre corchetes. Para hacer coincidir [, use \ [.
? Haga coincidir la subexpresión anterior cero o una vez, o especifique un calificador no codicioso. Para hacer coincidir el? Carácter, utilice \ ?.
\ Marque el siguiente carácter como un carácter especial, un carácter literal, una comilla al revés o un carácter de escape octal. Por ejemplo, 'n' coincide con el carácter 'n'. '\ n' coincide con un carácter de nueva línea. La secuencia '\\' coincide con "\", mientras que '\ (' coincide con "(".
^ Coincide con la posición inicial de la cadena de entrada, a menos que se use en una expresión de corchetes. Cuando el símbolo se usa en una expresión de corchetes, significa que no se acepta el conjunto de caracteres en la expresión de corchetes. Para hacer coincidir el carácter ^ en sí, use \ ^.
{ Marque el comienzo de la expresión del calificador. Para hacer coincidir {, use \ {.

 

También tenemos consultas difusas en MySQL, pero las consultas difusas en mongdb deberían ser más prácticas que MySQL, porque mongdb almacena principalmente tipos de documentos, mientras que MySQL es principalmente tipos de datos.

Sintaxis de MySQL:

Busque los registros en los que haya "tres" y "gato" en u_name

SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%' 

sintaxis de mongdb:

Descubra la información de Lei Wuxuan

db.students.find({name:/^雷.*轩$/})

Modificación avanzada

Especificar modificación de campo

En una estructura de tabla, necesitamos modificar un cierto campo para asegurar la precisión en tiempo real de los datos. Necesitamos hacer algunas modificaciones. Sin embargo, como dijimos antes, la modificación se puede modificar de manera de cobertura, pero no no quiero esto.

Caso 1: Por ejemplo, nos encontramos con un escenario de este tipo: cuando el profesor de educación física estaba recopilando información de toda la clase, después de que se completó la recolección, encontró que el instrumento para medir la altura parecía estar roto, lo que provocó que la altura de toda la clase disminuya en 1 cm. Como profesor ¿Qué debe hacer en nombre de su clase de educación física?

//构造查询文档
use cqust;
var query = {
    major: '大数据',
    class: 1,
    grade: 2019,
    height: {
        $lt: 170
    }
};

Después de eso, podemos usar bucles, y los bucles también se pueden escribir en mongdb, pero las reglas gramaticales deben cumplir con la gramática de JavaScript; de lo contrario, se informará un error.

Consulta después de ordenar

db.students.find(query).sort({height:-1});

Descubrimos que la estructura de la consulta tiene el tipo de estructura de matriz, entonces nos preguntamos si podemos usar la sintaxis de matriz para mostrar

var restult1 = db.students.find(query);

restult1[0]["name"]

Escribir una consulta usando la sintaxis de JavaScript

var idlist = new Array();

for (var i = 0; i < restult1.length(); i++) {
    idlist[i] = restult1[i]["name"];
}
idlist;

Ahora podemos manipular nuestro problema

//更新操作文档

var querys={name:{$in:idlist}}

var updates={$inc:{height:-1}};

var options={multi:1};

db.students.update(querys, updates, options);

db.students.find(query).sort({height:-1});

La pregunta anterior se modifica en función de un primer campo determinado, por lo que a veces modificamos los campos en el documento incrustado. En este momento, ¿cómo deberíamos hacer las operaciones por lotes? Por ejemplo, necesito modificar las calificaciones de una determinada materia en el curso. grados, agregue algunos puntos, luego, ¿cómo debemos ubicar este campo de etiqueta en este momento y luego realizar la modificación por lotes?

Si no lo piensas, no podrás aprender, y si no lo piensas, estarás perdido. Puedes dejárselo a ti mismo. Si tienes ideas, puedes dejar un mensaje. en el área de comentarios ¡Bienvenido a visitarnos!

Especificar consulta de campo

En un documento, necesitamos obtener la puntuación de un tema determinado y solo solicitar devolver la información de esta puntuación.

Por ejemplo, necesitamos preguntar, hay un tema llamado: Información *** distribuida que falló en el tema, ¿qué debemos hacer?

//查询分布式的课程的不及格信息,注意只需要返回该课程的分数
var 查询条件 = {
    'courses': {
        $elemMatch: {
            'course': /分布式/,
            'score': {
                $lt: 60
            }
        }
    }
}
var 返回条件2 = {
    _id: 0,
    'name': 1,
    'sno': 1,
    'courses': {$elemMatch:{'course':/分布式/}}   //利用数组elemMatch方法
};
db.students.find(查询条件, 返回条件2);

 

 Al encontrar una consulta en una matriz, primero debemos pensar en este operador: $ elemMatch: {algunas restricciones paralelas}, por ejemplo, necesitamos consultar la puntuación de un tema determinado, y la puntuación debe estar dentro del alcance de una determinada restricción. Entonces necesitamos este método para satisfacer la relación paralela

Operaciones de matriz

Especificar modificación de campo (tipo de matriz)

Por ejemplo, necesitamos modificar la identificación del estudiante: la altura en el cuerpo del estudiante de 2019000000 es 174,

// 先查询出数组元素的值
var 查询条件 = {'sno':2019000000}
var 返回条件 = {_id:0,'abody':1}
var res = db.students.findOne(查询条件,返回条件)
res.abody[0]=174
var 更新操作 = {$set:{'abody':res.abody}}
db.students.update(查询条件,更新操作)  //updateOne updateMany

Primero usamos findone para devolver una matriz. Si usamos find () para operar directamente, se reportará un error, lo que obviamente es una limitación en la matriz de campo.

Eliminar el primer elemento de la matriz

//删除数组的第一个元素
var 查询条件 = {'sno':2019000001}
var 更新操作={$pop:{'abody':-1}} //1代表删除最后一个
db.students.update(查询条件,更新操作)  

Aquí, el primer elemento en un cuerpo se elimina. Si cambiamos el atributo en pop a 1, entonces es el último en ser eliminado. La escena real la determinamos nosotros mismos.

Agregar un elemento al final

//追加一个元素到末尾
var 查询条件 = {'sno':2019000001}
var 更新操作={$push:{'abody':65}}
db.students.update(查询条件,更新操作) 

Uso adicional del comando push


Insertar un elemento en la posición especificada de la matriz

//插入一个元素到数组的指定位置,把14插入abody的第一个元素里面
var 查询条件 = {'sno':2019000001}
var 更新操作={$push:{'abody':{$each:[14],$position:1}}}
db.students.update(查询条件,更新操作)  

El índice 1 aquí es la posición intermedia

Eliminar elementos específicos en la matriz

var 查询条件 = {'sno':2019000001}
var 更新操作={$pull:{'abody':164}}
db.students.update(查询条件,更新操作)  

Eliminar el elemento específico en un cuerpo, que es 164

Después de ver tantas operaciones en tipos de matriz, ¿recuerda los campos anteriores que no eran de matriz? Hablé de eso antes, revisémoslo a continuación:

//删除非数组里面的元素
var 查询条件 = {'sno':2019000001}
var 更新操作={$unset:{'body.weight':1}}
db.students.update(查询条件,更新操作)  

//增加非数组里面的字段元素
var 查询条件 = {'sno':2019000001}
var 更新操作={$unset:{'body.weight':1}}
db.students.update(查询条件,更新操作)  

Operación por lotes de documentos

Actualizar varios documentos

var 查询条件={'name':/^王/,gender:1}
db.students.find(查询条件)
var 更新操作={$inc:{'body.height':1}}
var 更新选项={multi:1}
//updatemany()更新多个文档,updateone()更新一个文档
db.students.update(查询条件, 更新操作, 更新选项)
db.students.find(查询条件)

Se han actualizado varios documentos y la información del documento contiene las condiciones y restricciones que necesitamos.


Eliminar varios documentos

//默认删除全部的满足条件信息,deleteMany
var 查询条件={'name':/^王/,gender:1}
db.students.remove(查询条件)

//只删除第一个匹配结果
var 查询条件={'name':/^王/,gender:0}
var 删除选项={'justOne':1}  
db.students.remove(查询条件,删除选项)
//同理
db.students.deleteOne(查询条件)

Operar documentos inexistentes

Supongamos que tenemos un documento local que ya no existe, pero no sabemos si existe. En este momento, ya tenemos un caso de este tipo localmente. Necesitamos consultar y actualizar para cargar este registro de documento.

// 更新一个不存在的文档
var 王小王 = {
    "name": "王小王",
    "gender": 1,
    "body": {
        "height": 177,
        "weight": 60
    },
    "abody": [
        177,
        55
    ],
    "phone": "15730596577",
    "role": "student",
    "sno": 2019000891,
    "major": "大数据",
    "grade": 2019,
    "class": 3,
    "courses": [ ]
}
var 查询条件 = {"name": "王小王"} // 这个条件查询不到结果,数据库中没有这样的记录
var 替换文档 = 王小王
db.students.update(查询条件,替换文档)

 

var 更新选项 = {upsert:1}
db.students.update(查询条件,替换文档,更新选项)
/*
WriteResult({
	"nMatched" : 0,
	"nUpserted" : 1,
	"nModified" : 0,
	"_id" : ObjectId("605738c72410a0e84779ac7d"),
	"writeConcernError" : [ ]
})
*/
db.students.find({_id:ObjectId("605738c72410a0e84779ac7d")})

Entonces estamos asumiendo este caso, por ejemplo, a veces escribimos accidentalmente las condiciones incorrectas, información que no existe originalmente, haremos algunas restricciones al operador para que muestre alguna información insertada

var 查询条件 = {"name": "王小小"}  // 条件写错,查不到
var 更新操作 = {$set:{sno:2019999999}}  // 带操作符的更新文档
var 更新选项 = {upsert:1}
db.students.update(查询条件,更新操作,更新选项)
/*
WriteResult({
	"nMatched" : 0,
	"nUpserted" : 1,
	"nModified" : 0,
	"_id" : ObjectId("6057395a2410a0e84779ac91"),
	"writeConcernError" : [ ]
})

*/
db.students.find({"_id" : ObjectId("6057395a2410a0e84779ac91")})
/* 新文档相当于在空白文档上做了更新
{
    "_id": ObjectId("6057395a2410a0e84779ac91"),
    "name": "王小小",
    "sno": 2019999999
}

*/

Una palabra por texto

  • Cuando te encuentras en una situación difícil, sonreír abiertamente es una especie de mente abierta.
  • Cuando alguien es incomprendido, sonreír levemente es una especie de logro.
  • Cuando te hacen daño, sonreír con indiferencia es una especie de generosidad.
  • Cuando estaba indefenso, Daguan sonrió, que es un reino.
  • Cuando te critican, una sonrisa tranquila es una especie de confianza en ti mismo.
  • Cuando me siento frustrado, sonreí feliz, que es una especie de optimismo.
  • Poner una sonrisa en tu rostro en cualquier momento y en cualquier lugar también es un tipo de belleza.

Supongo que te gusta

Origin blog.csdn.net/weixin_47723732/article/details/114738455
Recomendado
Clasificación