2016-05-20 1 views
1

MongoDB-х $mod query operator обеспечивает способ выбора документов, где значение V поля разделены делителей D имеет указанный остаточный R. Поэтому он выбирает документы, где V mod D равно R.

Мне нужно переключить дивиденд и делитель операции по модулю. Другими словами, мне нужно выбрать документы, в которых предоставленный дивиденд D деленный на величину V поля имеет указанный остаток R. Поэтому мне нужно выбрать документы, где D mod V равно R.

Можно ли переключить дивиденд и делитель операционного запроса MongoDB $ mod? Если нет, возможно ли передать запрос пользовательскую функцию, которая позаботится об этом?

ответ

0

Регулярное .find запрос с оператором $mod не будет работать здесь, но все же, вы можете сделать это с помощью платформы агрегации и оператора $redact и арифметический оператор агрегации $mod.

Предположит, мы имеем следующие документы в нашей коллекции:

{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 }, 
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 }, 
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 }, 
{ "_id" : ObjectId("573f63504c01ce47a183a636"), "a" : 24 } 

Следующий запрос возвращает все те документы, где 60 по модулю значения поля a равно 0.

db.collection.aggregate([ 
    { "$redact": { 
     "$cond": [ 
      { "$eq": [ {"$mod": [ 60, "$a" ] }, 0 ] }, 
      "$$KEEP", 
      "$$PRUNE" 
     ] 
    }} 
]) 

, который производит:

{ "_id" : ObjectId("573f624b4c01ce47a183a632"), "a" : 4 } 
{ "_id" : ObjectId("573f63494c01ce47a183a634"), "a" : 12 } 
{ "_id" : ObjectId("573f63504c01ce47a183a635"), "a" : 6 } 

Другой, возможно, менее эффективный способ сделать это, чтобы использовать оператор $where.

db.collection.find("60 % this.a === 0")