当我在MongoDB Compass实用程序中运行该查询时,它运行良好:
{ $where: "if (this.media && this.media.length > 1 && this.status=='Published') {return this; } "}
在同一集合或表中,我还有两个字段createBy和userId
现在,我要过滤具有与userId不同的createdBy的记录。我试试这个:
{ $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查询控制台中进行比较。
答案 0 :(得分:1)
如果使用的Mongodb版本> = 3.6,则可以尝试$expr
操作,因为它比$where
快。
要比较ObjectId
,可以使用.equals()
方法,也可以在两个.toString()
上调用ObjectId
进行比较
{ $where: "if (this.media && this.media.length > 1 && this.status=='Published' && !this.userId.equals(this.createdBy)) {return this; } "}
答案 1 :(得分:1)
我认为您需要.toString()
方法来比较两个ObjectIds
尝试:
this.userId.toString()!= this.createdBy.toString()
另一种替代方法是使用.equals()
this.userId.equals(this.createdBy)
在此处详细了解.equals()和.toString()。