mongodb aggregate $match 中根据_id 做筛选,一直返回[]

    xx.aggregate([
            {$unwind: "$zview"},
            {$match: {"zview.id": parseInt(ids), _id: '59814025e51a2412b49d1aa0'}},
            {$project: {_id: 1, "zview": 1}}  
        ])

我把 $match 中的_id属性去掉,就能查询出 zview.id 符合的所有数据,但是加上_id就直接返回空了,

把_id换成别的字段也参查出数据, 把查出来的_id再复制到这边再进行查询,就还是差不出来,确定有数据。
是不是 在match中不允许使用_id作为查询条件呢。但是找了资料也没有说不行。各位大老有没有遇到过类似问题。

阅读 8.3k
3 个回答

没看到数据是什么样子,我猜的:
_idObjectId,把ObjectIdString比,结果当然是不等的。原理就跟1 != "1"一个道理。

xx.aggregate([
    {$unwind: "$zview"},
    {$match: {"zview.id": parseInt(ids), _id: ObjectId('59814025e51a2412b49d1aa0')}},
    {$project: {_id: 1, "zview": 1}}  
])
mogoose.types.ObjectId('59814025e51a2412b49d1aa0');

COPY FROM

https://stackoverflow.com/que...
var Mongoose = require('mongoose');
var ObjectId = Mongoose.Types.ObjectId;

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

===
所有应该是

const Mongoose = require('mongoose');
const { ObjectId } = Mongoose.Types;

// ...

xx.aggregate([
  { $unwind: "$zview" },
  { $match: { "zview.id": parseInt(ids), _id: new ObjectId('59814025e51a2412b49d1aa0') } },
  { $project: { _id: 1, "zview": 1 } }
])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题