Получить только 10-значный номер мобильного телефона в mongodb? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть коллекция с именем profile , как показано ниже.

{
name :"abc",
mobile : 9876543210
},
{
name :"def",
mobile : 98454
},
{
name :"ghi",
mobile : 1234567890
},
{
name :"mno",
mobile : 125456
}

Теперь я хочу получить вывод как

{
name :"abc",
mobile : 9876543210
},

{
name :"ghi",
mobile : 1234567890
}

Я пробовал вот так, но этоработает только для строкового поля.

db.profile.find( { $where: "this.mobile.length = 10" } );

Любая помощь?

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете попробовать агрегации ниже в mongodb 3.6 и выше

Вы можете проверить длину строки, используя агрегацию $strLenCPа затем отфильтруйте документ, длина строки которого равна **10**

db.collection.aggregate([
  { "$match": {
    "$expr": {
      "$eq": [{ "$strLenCP": { "$toLower": "$mobile" }}, 11]
    }
  }}
])

или даже с помощью запроса поиска

db.collection.find({
  "$expr": {
    "$eq": [{ "$strLenCP": { "$toLower": "$mobile" }}, 11]
  }
})

Для версий mongodb до 3.6

db.collection.aggregate([
  { "$addFields": {
    "mobileLength": {
      "$strLenCP": { "$toLower": "$mobile" }
    }
  }},
  { "$match": { "mobileLength": 11 }},
  { "$project": { "mobileLength": 0 }}
])
...