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

发布于 2022-09-06 02:34:55 字数 404 浏览 8 评论 0

    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作为查询条件呢。但是找了资料也没有说不行。各位大老有没有遇到过类似问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我偏爱纯白色 2022-09-13 02:34:55

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

xx.aggregate([
    {$unwind: "$zview"},
    {$match: {"zview.id": parseInt(ids), _id: ObjectId('59814025e51a2412b49d1aa0')}},
    {$project: {_id: 1, "zview": 1}}  
])
单身狗的梦 2022-09-13 02:34:55
mogoose.types.ObjectId('59814025e51a2412b49d1aa0');
风吹过旳痕迹 2022-09-13 02:34:55

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 } }
])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文