MongoDB - 在ObjectId上聚合$匹配

时间:2015-03-21 20:06:28

标签: mongodb mongoose aggregation-framework

我的架构看起来像这样:

var mongoose = require('mongoose');

module.exports = mongoose.model('Owner',{
    username: String,
    blocks: {type:mongoose.Schema.Types.ObjectId, ref: 'Block'},
});

我正在尝试运行查询以查看所有者是否具有对Block的id的引用。所有者有一个ObjectIds数组。当我运行db.owners.aggregate({$match: {username: 'example'}},{$unwind: "$blocks"},{$project: { _id : 1,blocks: 1}})时,它会返回:

{ "_id" : ObjectId("550d9dc64d9dc3d026fadfc7"), "blocks" : ObjectId("550dc117dc9605ab27070af7") }
{ "_id" : ObjectId("550d9dc64d9dc3d026fadfc7"), "blocks" : ObjectId("550dc123dc9605ab27070af8") }
{ "_id" : ObjectId("550d9dc64d9dc3d026fadfc7"), "blocks" : ObjectId("550dc12edc9605ab27070af9") }
{ "_id" : ObjectId("550d9dc64d9dc3d026fadfc7"), "blocks" : ObjectId("550dc157dc9605ab27070afa") }

如何匹配块ID?我已经尝试了db.publishers.aggregate({$match: {username: 'example'}},{$unwind: "$blocks"},{$project: { _id : 1,blocks: 1}},{$match : {"blocks._id" : '550dc157dc9605ab27070afa'}}),但这不起作用。

2 个答案:

答案 0 :(得分:6)

我认为您不需要聚合,您可以使用简单的find()findOne()查询:

var Mongoose = require('mongoose');
var ObjectId = Mongoose.Types.ObjectId;

Owner.findOne({ username: 'example', blocks: new ObjectId('550dc157dc9605ab27070afa') }, function (err, owner) {
   ...
});

答案 1 :(得分:1)

现在不适用于版本> 31年3月8日 我浪费了无数个小时,应该早点对早期的市长进行测试......