0

我有一个在 MongoDB Compass 实用程序中运行时运行良好的查询:

{ $where: "if (this.media && this.media.length > 1 && this.status=='Published') {return this; } "}

在同一个集合或表中,我还有两个字段 createBy 和 userId

在此处输入图像描述

现在我想过滤 createdBy 与 userId 不同的记录。我试试这个:

{ $where: "if (this.media && this.media.length > 1 && this.status=='Published' && this.userId != this.createdBy) {return this; } "}

这也是:

{ $where: "if (this.media && this.media.length > 1 && this.status=='Published' && ObjectId(this.userId) != ObjectId(this.createdBy)) {return this; } "}

但是以上两个都不起作用。我知道 ObjectId 是 Object 类型,并且比较具有完全相同值的对象是行不通的。只是不知道如何在 mongodb 查询控制台中进行比较。

4

2 回答 2

1

如果您使用的是 Mongodb 版本 >= 3.6,您可以尝试该$expr操作,因为它比$where.

要比较ObjectIds,您可以使用.equals()方法或调用.toString()两者ObjectId进行比较

{ $where: "if (this.media && this.media.length > 1 && this.status=='Published' && !this.userId.equals(this.createdBy)) {return this; } "}
于 2019-06-28T06:13:44.907 回答
1

我认为您需要.toString()比较两个 ObjectId 的方法

尝试 :

this.userId.toString()!= this.createdBy.toString()

另一种选择是使用.equals()

this.userId.equals(this.createdBy)

在此处阅读有关.equals().toString()的更多信息。

于 2019-06-28T06:14:08.673 回答