Mongoose:如何在populate中查询对象?

时间:2017-02-14 08:32:06

标签: mongodb express mongoose

我有这条路线用于搜索orderId的部分用户输入。

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 }
});

现在我需要搜索userPurchased中的firstname和lastname,这是我填充时才能得到的。怎么搜索呢?

1 个答案:

答案 0 :(得分:0)

我无法理解您在' userPurchased'中保存了哪些类型的信息?领域。我假设用户在不同的集合中,并且您只是在userPurchased中持久保存用户的id。如果您只是放置ID,则可以使用以下查询进行搜索:

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

如果你把一个带有字段的对象放在一边,那也没什么神秘之处。只需使用.运算符即可。例如:

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

希望它能帮到你