Mongoose聚合:如何获取没有填充列的所有文档?

时间:2014-02-01 12:04:23

标签: mongodb mongoose aggregation-framework

这是我的猫鼬模式:

var userSchema = new mongoose.Schema({
  userID: String,
  gender: String,
  dateCreated: { type: Date, default: Date.now }
})

这是我的查询

userSchema.statics.getUser = function(callback){
  this.aggregate()
    .exec(function(err, result){
      callback(result);
    });
}

某些用户在创建时可能没有添加性别,如何使用未填充属性性别的聚合来提取所有文档?

2 个答案:

答案 0 :(得分:2)

结果实际上与语言无关,所以一个简单的mongo shell就足够了。 结果可以简单地在查找中获得:

考虑:

> db.user.find().pretty()
{
    "_id" : ObjectId("52ecf6b46a8b205baeb2cc58"),
    "user" : "neil",
    "gender" : "M"
}
{ "_id" : ObjectId("52ecf6c66a8b205baeb2cc59"), "user" : "fabio" }
{
    "_id" : ObjectId("52ecf77c6a8b205baeb2cc5a"),
    "user" : "markus",
    "gender" : "M",
    "preference" : "any"
}

适用于:

> db.user.find({ preference: null }).pretty()
{
    "_id" : ObjectId("52ecf6b46a8b205baeb2cc58"),
    "user" : "neil",
    "gender" : "M"
}
{ "_id" : ObjectId("52ecf6c66a8b205baeb2cc59"), "user" : "fabio" }

还有 $ match 聚合:

> db.user.aggregate([{$match: { prefernce: null }}])
{
    "result" : [
            {
                    "_id" : ObjectId("52ecf6b46a8b205baeb2cc58"),
                    "user" : "neil",
                    "gender" : "M"
            },
            {
                    "_id" : ObjectId("52ecf6c66a8b205baeb2cc59"),
                    "user" : "fabio"
            },
            {
                    "_id" : ObjectId("52ecf77c6a8b205baeb2cc5a"),
                    "user" : "markus",
                    "gender" : "M",
                    "preference" : "any"
            }
    ],
    "ok" : 1
}

查看MongoDB文档中的Aggregation以获取更多信息。

答案 1 :(得分:0)

您不需要聚合。只需常规的旧查询即可。

User.find({gender: {$exists: false}}, function (error, users) {/*...*/}};