MongoDB - 在 ObjectId 上聚合 $match

标签 mongodb mongoose aggregation-framework

我有一个看起来像这样的模式:

var mongoose = require('mongoose');

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

我正在尝试运行查询以查看 Owner 是否引用了 Block 的 ID。所有者有一组 ObjectId。当我运行 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") }

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

最佳答案

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

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

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

关于MongoDB - 在 ObjectId 上聚合 $match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29187459/

相关文章:

javascript - reshape 存储在集合中的数组并导出为 CSV

node.js - MEAN.js 无法连接到 MongoDB

javascript - Mongoose 组结果(按年份和月份)

node.js - 为什么 Node.js 以这种方式执行?

node.js - 使用 Mongoose 从 Node 的 MongoDB 中的复杂嵌入式集合中插入、更新和删除

javascript - 如何使用 Node.JS 和 Mongoose 将数据从 MongoDB 获取到简单数组?

javascript - 选择集合并获取 MongoDB 中其他集合中每个集合的最后一项

django - 单页应用还是多页应用?

mongodb - Mongoose : Sorting array in a different order

mongodb - 如何通过相应文档的数组获取每个组的字段最大值?