gpt4 book ai didi

MongoDB:$nin 和 $in 在 $elemMatch 中不能协同工作

转载 作者:可可西里 更新时间:2023-11-01 10:42:04 25 4
gpt4 key购买 nike

我的 transactions 集合中有以下文档。

{txnId: 1, amount: 200, tags:["monthly", "recharge"]},
{txnId: 2, amount: 4000, tags:["monthly", "salary"]},
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]},
{txnId: 4, amount: 400, tags:["monthly", "electricity"]},
{txnId: 5, amount: 300, tags:["dinner", "daily"]}

我想获取所有有monthly但没有salary

的文档

我尝试过的一些查询及其各自的输出:

查询 1:

db.transactions.find({tags: {$elemMatch: {$in: ["monthly"], $nin: ["salary"]}}})

输出 1:

{txnId: 1, amount: 200, tags:["monthly", "recharge"]}
{txnId: 2, amount: 4000, tags:["monthly", "salary"]}
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]}
{txnId: 4, amount: 400, tags:["monthly", "electricity"]}

查询 2:

db.transactions.find({tags: {$nin: ["salary"]}})

输出 2:

{txnId: 1, amount: 200, tags:["monthly", "recharge"]}
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]}
{txnId: 4, amount: 400, tags:["monthly", "electricity"]}
{txnId: 5, amount: 300, tags:["dinner", "daily"]}

查询 3:

db.transactions.find({tags: {$nin: ["salary"]}, tags: {$elemMatch: {$in: ["monthly"]}}})

输出 3:

{txnId: 1, amount: 200, tags:["monthly", "recharge"]}
{txnId: 2, amount: 4000, tags:["monthly", "salary"]}
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]}
{txnId: 4, amount: 400, tags:["monthly", "electricity"]}

为什么 $in$nin 不能一起工作,甚至 $nin 不能按预期工作?还是我误解了?

最佳答案

您也可以同时使用 $nin 和 $in。下面的查询将给出预期的记录。希望不用$elemMatch。

db.transactions.find({$and:[{tags:{$in:['monthly']}}, {tags:{$nin:['salary']}}]}).toArray()

输出:

[
{txnId: 1, amount: 200, tags:["monthly", "recharge"]},
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]},
{txnId: 4, amount: 400, tags:["monthly", "electricity"]}
]

关于MongoDB:$nin 和 $in 在 $elemMatch 中不能协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38626368/

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