gpt4 book ai didi

node.js - Mongoose 在数组中选择 $ne

转载 作者:可可西里 更新时间:2023-11-01 09:44:19 24 4
gpt4 key购买 nike

我想知道您将如何查询 where array._id != 'someid'。

这是我为什么需要这样做的一个例子。用户想要更新他们的帐户电子邮件地址。我需要这些是唯一的,因为他们使用它来登录。当他们更新帐户时,我需要确保新电子邮件不存在于另一个帐户中,但如果它已经存在于他们的帐户中,请不要给出错误(他们没有更改他们的电子邮件,只是他们个人资料中的其他内容).

以下是我尝试使用的代码。它不会给出任何错误,但它总是返回 0 的计数,因此即使错误也永远不会产生。

Schemas.Client.count({ _id: client._id, 'customers.email': email, 'customers._id': { $ne: customerID } }, function (err, count) {
if (err) { return next(err); }
if (count) {
// it exists
}
});

我猜它应该使用 $ne 或 $not,但我找不到任何带有 ObjectId 的在线示例。

示例客户端数据:

{
_id: ObjectId,
customers: [{
_id: ObjectId,
email: String
}]
}

最佳答案

对于您现有的查询,您的查询的 customers.emailcustomers._id 部分将针对 customers 的所有元素进行评估,作为组,因此它不会匹配具有 any 元素和 customerID 的文档,无论其 email 是什么。但是,您可以使用 $elemMatch更改此行为,以便两个部分同时对每个元素进行操作:

Schemas.Client.count({ 
_id: client._id,
customers: { $elemMatch: { email: email, _id: { $ne: customerID } } }
}, function (err, count) {
if (err) { return next(err); }
if (count) {
// it exists
}
});

关于node.js - Mongoose 在数组中选择 $ne,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24833277/

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