【问题标题】:Nodejs Mongoose select a entire document but only with selected items in a property arrayNodejs Mongoose 选择整个文档,但仅包含属性数组中的选定项目
【发布时间】:2018-03-26 12:02:44
【问题描述】:

我是 nodejs 新手,目前我正在使用 nodejs、express 和 mongoose 开发 Web API。任何人都可以帮助我关注猫鼬查询。

var EventSchema = new Schema({

      event_title: {
            type: String,
            required: true
      },

      service_order: [{
                  _id:{
                    type: String
                  },
                  service : {
                        type: Schema.Types.ObjectId,
                        ref: "Service"
                  }

      }]    
});

我想选择整个事件文档,但仅包含该数组中选定的 service_order 项目

例如:- 这是完整的 Event 文档

{
   _id: "sample_id",
   name: 'some name',
   "service_order": [
                        {
                         "_id": "1"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f15"
                        },
                        {
                         "_id": "2"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f18"
                        },
                        {
                         "_id": "3"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f18"
                        },
                        {
                         "_id": "4"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f18"
                        }
                    ],
}

但我想执行一个可以将其作为输出的单个 mongoose 查询

{
       _id: "sample_id",
       name: 'some name',
       "service_order": [
                            {
                             "_id": "1"
                             "service": {
                                        "_id": "59c005524d9c141fe0d95f15"
                            },
                            {
                             "_id": "2"
                             "service": {
                                        "_id": "59c005524d9c141fe0d95f18"
                            }
                        ],
    }

最初我知道事件 id ("sample_id") 和我想要选择的 service_orders 的 id ( ["1","2"] )。

【问题讨论】:

    标签: arrays node.js mongoose mongodb-query mongoose-schema


    【解决方案1】:

    您可以使用 mongodb 聚合来实现这一点

    不要忘记将sample_id["1" , "2"] 替换为您的动态数据

    检查下面的代码:

    db.event.aggregate([
        {
            $match: { _id: "sample_id" } 
        },
        {
            $unwind: { path: "$service_order" }
        },
        {
            $match : { 'service_order._id' : { $in : [ "1" , "2"]} } 
        },
        {
            $group : { 
                _id: { _id: "$_id", "name": "$name"},
                service_order: { $addToSet: "$service_order" },
            }
        },
        {
            $project : {
                _id : "$_id._id",
                name : "$_id.name",
                service_order : 1
            }
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 2018-07-02
      • 2015-11-06
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多