1

У меня есть UserSchema, который содержит PhoneNumberSchema, как показано ниже.пользовательский поиск массового груза по телефонам

var PhoneNumberSchema = new Schema({ 
    country: { 
     type: String 
    }, 
    country_code: { 
     type: Number 
    }, 
    local_number: { 
     type: Number 
    } 
}); 

И вот образец json-формата phone_number.

"phone_number": { 
    "country": "US", 
    "country_code": "1", 
    "local_number": "04152341" 
} 

Что я хочу сделать, это поиск пользователей по телефонным номерам с/без кода страны.

Ну, если запрос

"phone_numbers": [ "104152341", "124254364"]

, то я хочу, чтобы пользователи, которые уже точно совпадающие номер телефона, который принадлежит в запросите номер телефона с/без кода страны.

Итак, я попробовал как показано ниже, но получил ошибку «invalid operator '$ in'".

User.aggregate(
    [ 
     { "$redact": { 
      "$cond": [ 
       { 
        "$in": [ { "$concat": [ "$phone_number.country_code", "$phone_number.local_number" ] }, req.body.phone_numbers] 
       }, 
       "$$KEEP", 
       "$$PRUNE" 
      ] 
     }} 
    ], 
    function(err, users) { 
     // Do something 
     if (err) { 
      return res.json({ success: false, err: err }); 
     } 
     res.json({ success: true, users: users }); 
    } 
) 

Я надеюсь узнать, как справиться с проблемой.

Пожалуйста, помогите мне!

ответ

0

Использование $setIsSubset в качестве выражения условия:

{ "$redact": { 
    "$cond": [ 
     { 
      "$setIsSubset": [ 
       [ 
        { 
         "$concat": [ 
          "$phone_number.country_code", 
          "$phone_number.local_number" 
         ] 
        } 
       ], 
       req.body.phone_numbers 
      ] 
     }, 
     "$$KEEP", 
     "$$PRUNE" 
    ] 
}} 
+1

Отлично, но мы должны также обращаться с/без кода страны, $ setIsSubset хорошо для двух полей конкатенации. :) – BigDaddy