sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $concat

V MongoDB, $concat Operátor agregačního kanálu zřetězí dva nebo více řetězců a vrátí zřetězený řetězec.

Příklad

Předpokládejme, že máme kolekci nazvanou employees s následujícím dokumentem:

{
	"_id" : 1,
	"firstName" : "Sandy",
	"surname" : "Beach",
	"position" : "Lifesaver",
	"salary" : 55000
}

Můžeme použít $concat operátor pro spojení křestního jména a příjmení:

db.employees.aggregate(
  [
    { $project: { 
        _id: 0,
        name: { $concat: [ "$firstName", "$surname" ] }
      }
    }
  ]
)

Výsledek:

{ "name" : "SandyBeach" }

Další řetězce

Předchozí příklad zřetězí dva řetězce, ale v případě potřeby můžeme zřetězit více.

Můžeme například vložit mezeru mezi křestní jméno a příjmení.

Příklad:

db.employees.aggregate(
  [
    { $project: { 
        _id: 0,
        name: { $concat: [ "$firstName", " ", "$surname" ] }
      }
    }
  ]
)

Výsledek:

{ "name" : "Sandy Beach" }

Do našeho zřetězení můžeme také zahrnout více polí.

Příklad:

db.employees.aggregate(
  [
    { $project: { 
        _id: 0,
        employee: { 
          $concat: [ "$firstName", " ", "$surname", ", ", "$position" ] 
          }
      }
    }
  ]
)

Výsledek:

{ "employee" : "Sandy Beach, Lifesaver" }

Další typy dat

$concat operátor podporuje pouze řetězce. Používá se $concat na jiný typ vede k chybě.

Příklad:

db.employees.aggregate(
  [
    { $project: { 
        _id: 0,
        name: { 
          $concat: [ "$firstName", "$salary" ] 
          }
      }
    }
  ]
)

Výsledek:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$concat only supports strings, not double",
	"code" : 16702,
	"codeName" : "Location16702"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

V tomto příkladu jsem se pokusil zřetězit řetězec s číslem, ale dostal jsem chybu, která říká, že $concat podporuje pouze řetězce, nikoli double .


  1. Hosting ScaleGrid pro Redis™ na vašem vlastním účtu AWS

  2. Mezipaměť Azure Redis – časové limity pro volání GET

  3. Proč MongoDB nepoužívá protínání indexů?

  4. MongoDB $ vč