2017-02-14 2 views
1

У меня есть этот маршрут для поиска частичного ввода пользователем для orderId.Mongoose: Как запрашивать объекты внутри заполнения?

ordersAdminRouter.route('/searchorder/:term') 
    .get(function(req, res){ 
     term = req.params.term; 
     console.log(term); 
     Orders.find({orderId: new RegExp(term)}) 
      .populate({ path: 'userPurchased products.product', select: '-username -password' }) 
      .exec(function(err, orders){ 
       if (err) throw err; 
       console.log(orders); 

       res.json(orders); 
      }); 
    }); 

Вот моя схема

var orderSchema = new Schema({ 
    orderId: { type: String }, 
    userPurchased: { type: Schema.Types.ObjectId, ref: 'users' }, 
    products: [ 
     { 
      product: { type: Schema.Types.ObjectId, ref: 'products' }, 
      size: { type: String, required: true }, 
      quantity: { type: Number, required: true }, 
      subTotal: { type: Number, required: true } 
     } 
    ], 
    totalQuantity: { type: Number }, 
    totalPrice: { type: Number }, 
    modeOfPayment: { type: String }, 
    shippingAd: { type: String }, 
    refNumber: { type: String }, 
    isDone: { type: Boolean, default: false }, 
    orderStatus: { type: String, default: 'Pending' }, 
    dateOrdered: { type: Date, default: Date.now() }, 
    fromNow: { type: String } 
}); 

Теперь мне нужно искать FirstName и LastName внутри userPurchased, которые я получаю только тогда, когда я заселить. Как искать его?

+0

@ThomasBormans Я думаю, что метод не то, что хорошие показатели мудры. Мне нужно получить все на db, а затем фильтровать каждые 400 мс, что является моей реализацией входных данных. Мой заказ db настолько велик, что он занимает иногда 10 секунд из-за кодированных base64 изображений. Ну, если нет другого подхода, тогда у меня нет выбора. –

+0

Вы абсолютно правы, но проблема такая же (я думаю). Вот почему я отметил это как дубликат. –

ответ

0

Я не мог понять, какую информацию вы сохраняете в поле userPurchased. Я предполагаю, что пользователи находятся в другой коллекции, и вы только сохраняете идентификатор пользователя в userPurchased. Если вы просто размещая идентификатор, можно найти с помощью следующего запроса:

orderSchema.find({userPurchased : 'id'}) 

Если вы помещаете объект с полями, нет никакой тайны либо. Просто используйте оператор .. Например:

orderSchema.find({userPurchased.firstName : 'name'}) 

Надеется, что это помогло вам

+0

Ваше первое утверждение верно. userPurchased - это только идентификатор, основанный на моей данной схеме. Я ищу userPurchased.firstname, но поля будут существовать только после метода .populate. Это означает, что я не могу использовать orderSchema.find ({userPurchased.firstname: 'name'}), потому что userPurchased является только идентификатором ПЕРЕД ПОПОЛНЕНИЕМ –

+0

Я вижу, извините, если мой ответ не был тем, что вы искали. Когда вы говорите, что хотите найти первое имя, это означает, что вы хотите выполнить второй поиск после первого поиска, я прав? –

+0

То, что я пытаюсь найти, - это выполнить поиск в первом выражении, то есть на find(), чтобы я мог уменьшить размер возвращаемых документов. –