对mongodb数据库的复杂查询$ eq ObjectID

时间:2017-10-12 18:25:22

标签: mongodb aggregation-framework

嗨有人可以告诉我为什么我不能使用objectId的$ eq作者?

db.boards.aggregate(
  [
    {
      $project: {
        "boardcards": {
          $reduce: {
            input: "$lists.cards",
            initialValue: [ ],
            in: { $concatArrays: [ "$$value", {
            $filter: {
               input: "$$this",
               as: "result",
               cond: { "$eq": [
                      "$$result.Author",
                       ObjectId("59df60fb6fad6224f4f9f22d")                    
                   ] 
                   }
            }
         } 
         ] 
         }
          }
        }
      }
    }
  ]
)

如果我为“dada”更改了ObjectId(“59df60fb6fad6224f4f9f22d”),并且在$ lists.cards中的位置如下:

    "cards" : [ 
        {
            "name" : "1"
        }, 
        {
            "name" : "2"
        }, 
        {
            "name" : "3",
            "Author" : "dada"
        }
    ]
}, 

查询将找到结果,但如果我更改ObjectID,我有:

 {
            "list" : "6",
            "cards" : [ 
                {
                    "name" : "1"
                }, 
                {
                    "name" : "2"
                }, 
                {
                    "name" : "3",
                    "Author" : [ObjectId("59df60fb6fad6224f4f9f22d")]
                }
            ]
        }

有人可以告诉我如何解决这个问题,因为我不能与objectid

相提并论

它可以是我没有在模型Object id ??

中设置
var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var BoardSchema = new Schema({
  name: { type: String, maxlength: 20 },
  lists : { type: Array },
  users : [{ type : Schema.Types.ObjectId, ref: 'User' }],


});

module.exports = mongoose.model('Board', BoardSchema);

修改 我需要在数组中使用id进行搜索如果我有:

 {
            "list" : "6",
            "cards" : [ 
                {
                    "name" : "1"
                }, 
                {
                    "name" : "2"
                }, 
                {
                    "name" : "3",
                    "Author" : [ObjectId("59df60fb6fad6224f4f9f22d"), ObjectId("59df60fb6fad6224f4f9f22d"), ObjectId("59df60fb6fad6224f4f9f22d")                                  ]
                }
            ]
        }

我确实喜欢你说:

    db.boards.aggregate(
  [
    {
      $project: {
        "boardcards": {
          $reduce: {
            input: "$lists.cards",
            initialValue: [ ],
            in: { $concatArrays: [ "$$value", {
            $filter: {
               input: "$$this",
               as: "result",
                   cond : { "$in": [ "$$result.Author", array ]}
            }
         } 
         ] 
         }
          }
        }
      }
    },
    {
    "$unwind": "$boardcards"
  } 
  ]
)

并且是错误,数组未定义

0 个答案:

没有答案