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

Jak se řekne... shoda, když pole je číslo... v mongodb?

Použijte $type operátor ve vašem $match :

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {city: {$type: 16}}}      // city is a 32-bit integer
]);

Pro číslo neexistuje jediná typová hodnota, takže musíte vědět, jaký typ čísla máte:

32-bit integer   16
64-bit integer   18
Double           1

Nebo použijte $or operátor tak, aby odpovídal všem typům čísel:

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {$or: [{city: {$type: 1}}, {city: {$type: 16}}, {city: {$type: 18}}]}}
]);

Nebo dokonce použijte $not aby se všechny dokumenty shodovaly s city není řetězec:

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {city: {$not: {$type: 2}}}}      // city is not a string
]);

AKTUALIZOVÁNO

Aby se všechny dokumenty shodovaly s city je číselný řetězec, můžete použít regulární výraz:

db.zips.aggregate([
    {$project : {city:{$substr:["$city",0,1]}}},
    {$sort : {city : 1}}, 
    {$match: {city: /^\d.*$/}}      // city is all digits
]);


  1. Vytvořte víceklíčový index v MongoDB

  2. htmlspecialchars odstraní hodnotu uvnitř pole?

  3. Jak se dotazovat na dokumenty v mongodb (pymongo), kde všechna klíčová slova existují v poli?

  4. Jak zacházet se spojovníky v definicích schématu GraphQL