node.js - Mongodb Node.js $lookup 带日期和 $match

标签 node.js mongodb join aggregate lookup

任何人都可以帮助我使用 $lookup 加入 MongoDB 来获取日期在日期“X”和日期“Y”之间且 Chef_id 为“P”的所有订单。 “日期”部分有问题,没有提供日期数据。但是当我在单个查找查询中使用它时,它工作正常并提供日期之间的数据。但当我使用 $lookup 进行连接时,它没有提供数据。 这是我的查询

Order.aggregate([{
            "$lookup": {
                "localField": "user_id",
                "from": "users",
                "foreignField": "_id",
                "as": "order_data"
            }
        },
         {
            "$match": {
                "$and": [
                    { "chef_id": mongoose.Types.ObjectId(req.body.chef_id) },
                    { "booking_datetime": { $gte: start_time,
                    $lte: end_time } }
                ]
            }
        }

    ], function(err, gettt) {
        if (err) {
            res.json({ 'message': "Error", 'status': false, 'data': err });
            return false;
        } else {
            if (gettt.length != 0) {
                res.json({ 'message': "Orders Data", 'status': true, 'data': gettt });
            } else {
                res.json({ 'message': "No Orders for this date", 'status': false, 'data': gettt });
            }
        }
    });  

谁能帮帮我。

我的收藏在这里“订购”收藏

{
"_id" : ObjectId("5a4256cc3f76bc45065021fc"),
"order_status" : 2,
"total_order_amount" : "160",
"booking_datetime" : ISODate("2017-12-29T23:24:00.000Z"),
"customer_address" : "121/161, South Extension part",
"user_id" : ObjectId("5a3cb4a8a188f2074714f1de"),
"chef_id" : ObjectId("5a390b07f0b3563db59cb3ca"),
"updated_at" : ISODate("2017-12-26T14:03:56.742Z"),
"created_at" : ISODate("2017-12-26T14:03:56.342Z"),
"products" : [ 
    {
        "product_id" : "5a3a50fcefc0c972377c3012",
        "product_name" : "sweet corn",
        "quantity" : "12",
        "_id" : ObjectId("5a4256cc3f76bc45065021fd"),
        "updated_at" : ISODate("2017-12-26T14:03:56.736Z"),
        "created_at" : ISODate("2017-12-26T14:03:56.736Z")
    }, 
    {
        "product_id" : "5a3a5119efc0c972377c3013",
        "product_name" : "chilly paneer",
        "quantity" : "10",
        "_id" : ObjectId("5a4256cc3f76bc45065021fe"),
        "updated_at" : ISODate("2017-12-26T14:03:56.736Z"),
        "created_at" : ISODate("2017-12-26T14:03:56.736Z")
    }, 
    {
        "product_id" : "5a3a512cefc0c972377c3014",
        "product_name" : "Gulab jamun",
        "quantity" : "20",
        "_id" : ObjectId("5a4256cc3f76bc45065021ff"),
        "updated_at" : ISODate("2017-12-26T14:03:56.736Z"),
        "created_at" : ISODate("2017-12-26T14:03:56.736Z")
    }, 
    {
        "product_id" : "5a3a50fcefc0c972377c3012",
        "product_name" : "ali baba",
        "quantity" : "56",
        "_id" : ObjectId("5a4256cc3f76bc4506502200"),
        "updated_at" : ISODate("2017-12-26T14:03:56.736Z"),
        "created_at" : ISODate("2017-12-26T14:03:56.736Z")
    }
],
"__v" : 1

这是我的用户集合

{
"_id" : ObjectId("5a623f67eaa08537fe0dba02"),
"salt" : "73824ba53291740e15d26c300c997ce1436ac678299101171af74f4980433285",
"hash" : "8f78291ac737dac15f59f5438033a61de75282a3c671a8d0231406a8374adec140b4cb2dd30b852f05241c6f9900443906fafec22ad58c983dacaed8f9ef4f9039e72b748d9c63d924239aa40372923d824a9cc796079556c8bc5eb0b0f6b17e7fd4c35b8780c870d1b4b819e641e56ce2f88fb0a7fdfbfd91d15921e9b7441a7051523903b43b930f56057852e41ffdbdc044cc09b14ebaac77940576b483d58ff1e18c381d40a143abcd1a180ca208aac6a13eb5c819b97e7e5753bd6fc40fcc1e19b55cb816879b3fedbf187110e84149bad0918672bd2de49bc323a32f04dd0e55aded9a0157fd5eea7db645303eb4cf461e47ca905e1f196618814b88421a3cab9463dac01d5bf6aebcace6e4b1215c3cf07aaae1cac07c94dc28432d223407778f4c6b12b089e09d56a59b1f00084c727f06247c1799c1a8616c74693e2d7057a5026e3c02b9ef73bf867873508575a33fc1e956bd3c704c54e6cc38ffb22e7a04ade70db134ec87e9ed3f43a7273db115127470f8ca5d8def49ba47fe7852cdf0cbd3140b19d5fe358d29eb84519365eea6353fa34c7a6757fbd9ec2ba93eca802f21944da58cd72b5d0d7000f9fd6f231f0668b7e621117a18fcedf977515e181325a9210380e01892891fcc420a67cb5246688eb6e577fccb6d41e719b426fa20c4689af9a9485d0ae0cf026845de8b4f12c7277b9cc506b5e29224",
"email" : "eduardo.llano@geocampo.co",
"firstname" : "Pedro",
"lastname" : "Peez",
"dob" : "1980-01-19",
"phone" : "3185311158",
"gender" : "male",
"latitude" : "4.6936225",
"longitude" : "-74.0730777",
"address" : "Bogota",
"divice_token" : "dcd8cf3ceefc39b8",
"prossing_form" : "1",
"status" : true,
"role" : "chef",
"updated_at" : ISODate("2018-02-01T16:09:27.465Z"),
"created_at" : ISODate("2018-01-19T18:56:39.070Z"),
"products" : [ 
    {
        "product_name" : "Producto 1",
        "product_price" : "100",
        "discount" : "10",
        "product_ingredients" : "Pepper",
        "product_description" : "Nsjdjd jsjdjdjx",
        "minimum_order" : "2",
        "tags" : "Indian food",
        "status" : "1",
        "product_image0" : "https://s3-us-west-2.amazonaws.com/rafahoproject/a47df980-7221-4fde-97cd-977cb3dd1dcf.jpg",
        "product_image1" : "https://s3-us-west-2.amazonaws.com/rafahoproject/3a282cae-028c-4d4a-9a22-4c2c43d440f1.jpg",
        "product_image2" : "https://s3-us-west-2.amazonaws.com/rafahoproject/1ab4373e-ec63-43fe-9b94-7b85d289c7f9.jpg",
        "_id" : ObjectId("5a6602aa135fae732d5ce3d7")
    }, 
    {
        "product_name" : "Bandeja Paisa",
        "product_price" : 100,
        "discount" : 20,
        "cuisine" : "Continental",
        "minimum_order" : 5,
        "cooking_time_at_chef_place" : 8,
        "cooking_time_at_user_home" : 10,
        "tags" : "Bandeja-Paisa,Bandeja,Paisa",
        "status" : "1",
        "product_image0" : "https://s3-us-west-2.amazonaws.com/rafahoproject/0252161e-0e2a-4682-b7ab-0dce355be794.jpg",
        "_id" : ObjectId("5a71d268947536411def9b11")
    }, 
    {
        "product_name" : "Fritanga",
        "product_price" : 200,
        "discount" : 30,
        "cuisine" : "continental",
        "minimum_order" : 6,
        "cooking_time_at_chef_place" : 3,
        "cooking_time_at_user_home" : 5,
        "tags" : "Fritanga,platter-of-grilled-meats",
        "status" : "1",
        "product_image0" : "https://s3-us-west-2.amazonaws.com/rafahoproject/14c39e2f-4d02-4cd1-8aa7-2f7179b5ea0c.jpg",
        "_id" : ObjectId("5a71d3c6947536411def9b12")
    }, 
    {
        "product_name" : "Dominican Sancocho",
        "product_price" : 300,
        "discount" : 50,
        "cuisine" : "continental",
        "minimum_order" : 5,
        "cooking_time_at_chef_place" : 1,
        "cooking_time_at_user_home" : 2,
        "tags" : "Dominican-Sancocho,Dominican,Sancocho",
        "status" : "1",
        "product_image0" : "https://s3-us-west-2.amazonaws.com/rafahoproject/40a701ff-f868-492d-bee1-d65004fff024.jpg",
        "_id" : ObjectId("5a71d4da947536411def9b13")
    }, 
    {
        "product_name" : "Sudado de Pollo",
        "product_price" : 60,
        "discount" : 10,
        "cuisine" : "Continental",
        "minimum_order" : 3,
        "cooking_time_at_chef_place" : 3,
        "cooking_time_at_user_home" : 2,
        "tags" : "Sudado-de-Pollo,Sudado,de-Pollo",
        "status" : "1",
        "product_image0" : "https://s3-us-west-2.amazonaws.com/rafahoproject/544c2ceb-839b-4263-b482-e2262c228948.jpg",
        "_id" : ObjectId("5a71d6e9947536411def9b14")
    } 

],
"loc" : {
    "coordinates" : [ 
        -74.0730777, 
        4.6936225
    ],
    "type" : "Point"
},
"__v" : 9,

}

最佳答案

你的语法看起来不错。我仍然怀疑存在某些数据类型不匹配或格式错误。我有一个与日期范围匹配的类似聚合,并且我使用 new Date() 将字符串转换为日期。

if (typeof dateBeginning === "string" && dateBeginning != "" && typeof dateEnding === "string" && dateEnding != "" && dateEnding >= dateBeginning) {
    query.date = { $gte: new Date(dateBeginning), $lte: new Date(dateEnding) };
}

这是一个SO question: Date query with ISODate in mongodb doesn't seem to work 就这样解决了。

此外,Veeram 是正确的;你应该把你的$match放在第一位。这样,MongoDb 将使用可用的匹配字段上的任何索引。

关于node.js - Mongodb Node.js $lookup 带日期和 $match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565790/

相关文章:

javascript - Elasticsearch返回的结果大于范围内指定的结果

node.js - 使用预先选择的 ID 将 json 保存到 mongo 中

java - 使用 MongoDB 删除新数组并将其添加到 JSON 对象中

javascript - Mongoose.findOneAndUpdate() 没有创建新文档

javascript - 生成并存储电子(数字)签名

node.js - 为什么根据生产/开发状态使用不同的调试模块?

javascript - MongoDb 按其他集合中的计数对集合进行排序

unix - 按 2 列连接 2 个文件,使用 awk 保留所有记录

mysql - 内连接如何嵌套?

mysql - 演示索引 SQL 表的性能优势