gpt4 book ai didi

c# - 查找数组中元素的值是否等于父元素值

转载 作者:太空狗 更新时间:2023-10-29 17:56:49 24 4
gpt4 key购买 nike

假设我们有一组这样的文档:

{
"_id" : ObjectId("591c54faf1c1f419a830b9cf"),
"fingerprint" : "3121733676",
"screewidth" : "1920",
"carts" : [
{
"cartid" : 391796,
"status" : "New",
"cart_created" : ISODate("2017-05-17T13:50:37.388Z"),
"closed" : false,
"items" : [
{
"brandid" : "PIR",
"cai" : "2259700"
}
],
"updatedon" : ISODate("2017-05-17T13:51:24.252Z")
},
{
"cartid" : 422907,
"status" : "New",
"cart_created" : ISODate("2017-10-23T08:57:06.846Z"),
"closed" : false,
"items" : [
{
"brandid" : "PIR",
"cai" : "IrHlNdGtLfBoTlKsJaRySnM195U"
}
],
"updatedon" : ISODate("2017-10-23T09:46:08.579Z")
}
],
"createdon" : ISODate("2016-11-08T10:29:55.120Z"),
"updatedon" : ISODate("2017-10-23T09:46:29.486Z")
}

如何只提取数组 $.carts 中没有项目将 $.carts.closed 设置为 true 且 $.carts.updatedon 大于 $.updatedon< 的文档 减去 3 天 ?

我知道如何找到数组中没有项目满足条件的所有文档 $and: [closed: {$eq: true}, {updatedon: {$gt : new ISODate("2017- 10-20T20:15:31Z")}}]

但是如何引用父元素 $.updatedon 进行比较呢?

在普通的 mongodb shell 查询语言中它会很有帮助。

但我实际上是使用c#驱动程序访问它,所以我的查询过滤器是这样的:

FilterDefinition<_visitorData> filter;
filter = Builders<_visitorData>.Filter
.Gte(f => f.updatedon, DateTime.Now.AddDays(-15));
filter = filter & (
Builders<_visitorData>.Filter
.Exists(f => f.carts, false)
| !Builders<_visitorData>.Filter.ElemMatch(f =>
f.carts, c => c.closed && c.updatedon > DateTime.Now.AddDays(-15)
)
);

如何将 DateTime.Now.AddDays(-15) 替换为对文档根元素 updatedon 的引用?

最佳答案

您可以预测 carts.updatedon 和 updatedon 的差异,然后从该聚合管道中过滤出结果。

coll.aggregate([{'$unwind':'$carts'},
{'$match':{'closed':{'$ne':true}}},
{'$project':{'carts.cartid':1,'carts.status':1,'carts.cart_created':1,'carts.closed':1,'carts.items':1,'carts.updatedon':1,'updatedon':1,'diff':{'$subtract':['$carts.updatedon','$createdon']}}},
{'$match': {'diff': {'$gte': 1000 * 60 * 60 * 24 * days}}}])

days = 3 会过滤掉结果超过3天的差异文件。

我刚刚给出了如何使用 $subtract 查找日期差异并基于此过滤文档的示例。

关于c# - 查找数组中元素的值是否等于父元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915850/

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