Node.js 索引为已知字段的Mongodb$match on objects字段
假设我有一份这样的文件Node.js 索引为已知字段的Mongodb$match on objects字段,node.js,mongodb,projection,Node.js,Mongodb,Projection,假设我有一份这样的文件 const User = { info: { id: 123, }, data: { 111:{}, 123:{value: 5}, 234:{value: 10}, } } 我想进行预处理和聚合,以检查'data.123.value'是否大于10 mongo有可能这样吗?这是我目前所拥有的,但它不起作用 aggregate([ { $project: { U
const User = {
info: {
id: 123,
},
data: {
111:{},
123:{value: 5},
234:{value: 10},
}
}
我想进行预处理和聚合,以检查'data.123.value'是否大于10
mongo有可能这样吗?这是我目前所拥有的,但它不起作用
aggregate([
{
$project: {
UserId: '$info.id',
}
},
{
$match: {
'data[$UserId].value: {$gt: 10},
}
}
]
我可以做一些服务器端的工作来执行这个操作,但如果mongo能帮我做这个,我会很酷
感谢您的帮助
aggregate([
{$project:{dataToarray:{$objectToArray: "$data"} }},
{$unwind:"$dataToarray"},
{$match:{v:{$gt:10}}}
])
使用$objectToArray运算符
3.6版中新增的in operator能否详细说明您希望实现的目标?您确定此文档示例是正确的吗?如果您只想让用户集合和
value:10
,而您想让用户的值超过10,该怎么办?我对文档做了一点简化。但是我想返回集合中的所有文档,其中“info.id”索引中的“数据”大于10。数据可以有其他用户信息id,因此我需要根据给定用户文档的信息id对其进行索引。我认为您应该有2个集合和模型:1。用户(用户集合),2。UserData(user_data)之后,您可以使用对db:1的2个请求来访问它。获取用户id字段,2。获取具有该对象值的用户_数据。没有SQL数据库不喜欢关系型的东西,在这种情况下,您必须考虑不同的方法来实现您的目标Resumingvar userId='123'代码>然后:{“$match”:{`data.${userId}.value`:123}
。我看到您使用了一个“single”`
,但是您没有正确地得到其余的插值。另外,$match
始终先匹配,因为这与select*from d不同,其中this=“a”
和聚合管道中的“顺序”对性能很重要。这不是问题所问的。他们想用一个变量来决定搜索哪个键。此外,在现实世界中,强制投影以匹配某个值是一个非常糟糕的主意。