动态mongo投影-使用文档中的字段确定投影的投影

英国电信

说我有一个这样的对象:

{default: 'x',
 types: {
  x:1,
  y:2,
  z:3
 }
}

是否可以仅选择types.x(即的投影{"types.x":1})而无需事先知道x是默认值?进行两个查询显然是可能的,而不是我要的查询。

胡安·卡洛斯·法拉

不幸的是,这尚未成为聚合框架的一部分。但是,根据此JIRA票证,它当前是“按未计划的计划”。当前唯一的方法是使用map / reduce功能。如果要继续使用它,则意味着要执行以下操作:

  1. 通过_id映射每个文档,并发出适当的密钥。
  2. 由于每个键只有一个值,reduce函数将不会被调用,但是您仍然需要初始化用于reduce函数的变量。您可以使用空函数或空字符串。
  3. 运行map / reduce,将结果保存在您选择的集合中。

mongo外壳中,它看起来如下所示:

var mapper = function() {
    var typeValue = this.types[this.default];
    emit(this._id, typeValue);
};
var reducer = "";

db.types.mapReduce(mapper, reducer, { out : "results" } );

如果然后查询结果集合,则会得到如下信息:

> db.results.find();
{ "_id" : ObjectId("53d21a270dcfb83c7dba8da9"), "value" : 1 }

如果您想知道默认值是什么,则可以修改mapper函数以同时将键作为值返回。它看起来像这样:

var mapper = function() {
    var typeValue = this.types[this.default],
        typeKey = "types." + this.default;

    emit(this._id, { key : typeKey, val : typeValue } );
};   

运行时,它将产生如下结果:

> db.results.find().pretty();
{
    "_id" : ObjectId("53d21a270dcfb83c7dba8da9"),
    "value" : {
        "key" : "types.x",
        "val" : 1
    }
}

请注意,这可能是比您想要的要复杂得多的解决方案,但这是使用MongoDB而不向应用程序添加更多逻辑的唯一方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于非数组字段在mongo文档中投影数组值

来自分类Dev

如何从数组中的文档投影特定字段?

来自分类Dev

使用LINQ动态投影

来自分类Dev

使用LINQ动态投影

来自分类Dev

仅返回投影数组子文档中的特定字段

来自分类Dev

Mongo 位置投影 $

来自分类Dev

Mongo投影仅用于字段和值

来自分类Dev

包含某些字母的投影文档查询字段

来自分类Dev

动态投影单个县

来自分类Dev

矢量投影以确定拟合曲线中的弯头

来自分类Dev

如何使用mongodb在数组中投影字段

来自分类Dev

使用MongoDB投影来嵌套整个文档?

来自分类Dev

使用Spring的MongoTemplate在嵌套文档上的投影

来自分类Dev

MongoDB聚合:将单独的文档字段投影到单个数组字段中

来自分类Dev

MongoDB聚合:将单独的文档字段投影到单个数组字段中

来自分类Dev

如何在Spring Data Mongo中的聚合投影字段中嵌套字段

来自分类Dev

如何根据条件在猫鼬中投影文档中的选定字段

来自分类Dev

根据是否存在字段在投影管道中实现mongo $ cond字段

来自分类Dev

如何获取嵌入到数组中的特定文档的某些字段的投影?

来自分类Dev

MongoDB:如何为单个文档投影所有字段类型?

来自分类Dev

在Concat投影中使用Cast投影

来自分类Dev

如何在mongo shell查询中仅投影嵌套数组的匹配字段

来自分类Dev

关系代数中的投影

来自分类Dev

mongodb中的投影查询

来自分类Dev

mongoDB findOneAndUpdate() 中的 $ 投影

来自分类Dev

在 DAX 中投影

来自分类Dev

ReactiveMongo:如何使用投影

来自分类Dev

SpringData MongoDB使用投影

来自分类Dev

使用MongoDB投影