【问题标题】:Get all fields with search on the particular field mongo node获取在特定字段 mongo 节点上搜索的所有字段
【发布时间】:2020-04-06 14:30:21
【问题描述】:

所以我有两个不同的集合,一个是 users,第二个是 product,我想按名称字段搜索产品,它应该提供所有数据users 集合中的用户详细信息。

代码 sn-p:

app.get('/api/searchProduct/:name', function(request, response) {
    search = request.params.name;
    product.aggregate([
        { "$project": { "supplierID": { "$toObjectId": "$supplierID" } } },
        { $lookup: {
            "localField": "supplierID",
            "from": "users",
            "foreignField": "_id",
            "as": "userDetails"
        }},

        ], function(error, data) {
            if(error) {
                return response.send(error);
            } else {
                response.status(200).json({
                    status: 'success',
                    data: data,
                })
                console.log(JSON.stringify(data));
            }
        })
    })

实际 JSON 结果:

{
  "status": "success",
  "data": [
    {
      "_id": "5e89b936e20452a419ccbcad",
      "supplierID": "5e89b916e20452a419ccbcac",
      "userDetails": [

      ]
    },
    {
      "_id": "5e89bc5ee20452a419ccbcb0",
      "supplierID": "5e89bc48e20452a419ccbcae",
      "userDetails": [
        {
          "_id": "5e89bc48e20452a419ccbcae",
          "timestamp": "2020-04-05T10:37:09.582Z",
          "name": "Mohamma Junaid Raza",
          "email": "junaidraza10896@gmail.com",
          "password": "Iamjunaidr@10896",
          "contact": "",
          "userType": "",
          "profilePhoto": "",
          "__v": 0
        }
      ]
    },
    {
      "_id": "5e89c12bf312e7a5cdfe2e9e",
      "supplierID": "5e89bc48e20452a419ccbcae",
      "userDetails": [
        {
          "_id": "5e89bc48e20452a419ccbcae",
          "timestamp": "2020-04-05T10:37:09.582Z",
          "name": "Mohamma Junaid Raza",
          "email": "junaidraza10896@gmail.com",
          "password": "Iamjunaidr@10896",
          "contact": "",
          "userType": "",
          "profilePhoto": "",
          "__v": 0
        }
      ]
    },

  ]
}

我想要产品的完整详细信息(字段),并在产品数据下方显示的名称字段上进行搜索查询:

【问题讨论】:

    标签: node.js mongodb mongodb-query aggregation-framework


    【解决方案1】:

    试试这个代码:

    app.get('/api/searchProduct/:name', function(request, response) {
        search = request.params.name;
        product.aggregate([
            {$match : {name : search}},
            { "$addFields": { "supplierID": { "$toObjectId": "$supplierID" } } },
            { $lookup: {
                "localField": "supplierID",
                "from": "users",
                "foreignField": "_id",
                "as": "userDetails"
            }},
            { "$addFields": { "supplierID": { "$toString": "$supplierID" } } }
            ], function(error, data) {
                if(error) {
                    return response.send(error);
                } else {
                    response.status(200).json({
                        status: 'success',
                        data: data,
                    })
                    console.log(JSON.stringify(data));
                }
            })
        })
    

    问题:

    1. 您将$project 作为第一阶段,这将只为集合中的每个文档留下两个转换为supplierID_id 的字段。而是使用$addFields,它将保留文档中的所有字段并将supplierID 的字符串值替换为ObjectId(),反之亦然。
    2. 您尚未针对名称与输入匹配的特定文档过滤您的集合,请使用 $match 过滤文档。

    【讨论】:

    • 谢谢它的工作,你能解释一下搜索是否区分大小写。
    • 我已经完成了:{ $match : {'name':{'$regex':search, '$options' : 'i'}} } 谢谢
    • @SalmanGhumsani:哦,在这种情况下,您可以在 node.js 中使用像 { $match : {'name': new RegExp(search, 'i')}} 这样的正则表达式,尝试并让我知道.. 你已经得到了答案 :-) 任何有用的东西都很酷!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多