gpt4 book ai didi

javascript - Mongo 聚合 $match 相当于 {$where : "this.field1 !== this.field2"}

转载 作者:可可西里 更新时间:2023-11-01 10:03:05 24 4
gpt4 key购买 nike

<分区>

所以我有这个查询,db.collection.find({$where: "this.field1 !== this.field2"})

但现在我需要创建一个类似的查询并将结果聚合到一个经过尝试且真实的复杂查询中,只能通过使用聚合管道或“大炮飞”并使用 mapReduce 选项来完成。

因为我想避免使用 mapReduce,有没有办法实现类似于 {$where: "this.field1 !== this.field2"} 方法?

一些观察,解决上述情况的一般方法的答案是最可取的,但如果不可能,为了解决我的问题,我也可以使用原始值在具有以下限制的查询中。我需要找到下面的内容

db.collection.find({ $or :[
{field1: value},
{field2: value}
], $and: [
{ field1: {$not: {$eq: value}}},
{ field2: {$not: {$eq: value}} }
]})

我尝试了上面的查询,但它丢弃了在任一字段中包含值的结果,而我想要的是一种方法来丢弃同时在两个字段中具有相同值的对象,但是获取在任一字段中都具有值的文档,我通常更喜欢一种查询方法,但在阅读了很多之后,我认为避免 mapReduce 的唯一选择是做类似的事情

db.collection.find({$where: "this.field1 === this.field2"}, function (err, results){
var match = { $or :[
{field1: value},
{field2: value}
], {
_id : { $not : {$in: results.map((x) => x._id)}}
}
db.collection([ {$match: match}, {$project: projectionObject}, ...., etc])
})

所以我将使用上面的 be 解决方案,它可以优化很多,(我只是在写问题时写的),但我想避免将一个非常大的 objectIds 列表发送回数据库如果可能的话。我将对其进行一些重构,以便在 where 语句之前使用匹配运算符

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com