Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 索引为已知字段的Mongodb$match on objects字段_Node.js_Mongodb_Projection - Fatal编程技术网

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数据库不喜欢关系型的东西,在这种情况下,您必须考虑不同的方法来实现您的目标Resuming
var userId='123'然后:
{“$match”:{`data.${userId}.value`:123}
。我看到您使用了一个“single”
`
,但是您没有正确地得到其余的插值。另外,
$match
始终先匹配,因为这与
select*from d不同,其中this=“a”
和聚合管道中的“顺序”对性能很重要。这不是问题所问的。他们想用一个变量来决定搜索哪个键。此外,在现实世界中,强制投影以匹配某个值是一个非常糟糕的主意。