小编Nei*_*unn的帖子

在MongoDB中执行搜索/投影时如何重命名字段?

是否可以重命名查找查询中返回的字段名称?我想使用类似的东西$rename,但我不想改变我正在访问的文件.我只想以不同的方式检索它们,就像SELECT COORINATES AS COORDS在SQL中一样.

我现在应该做什么:

db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}
Run Code Online (Sandbox Code Playgroud)

我想要归还的是: {'coords': [10, 20]}

mongodb mongodb-query aggregation-framework

36
推荐指数
3
解决办法
3万
查看次数

MongoDB:upsert子文档

我有类似的文档,具有唯一索引bars.name:

{ name: 'foo', bars: [ { name: 'qux', somefield: 1 } ] }

.我想更新子文档在哪里{ name: 'foo', 'bars.name': 'qux' }$set: { 'bars.$.somefield': 2 },或者用{ name: 'qux', somefield: 2 }under 创建一个新的子文档{ name: 'foo' }.

是否可以使用带有upsert的单个查询来执行此操作,还是必须发出两个单独的查询?

相关:嵌入式文档中的"upsert"(建议更改模式以将子文档标识符作为键,但这是两年前的事情,我想知道现在是否有更好的解决方案.)

upsert mongodb mongodb-query

35
推荐指数
3
解决办法
2万
查看次数

$在聚合框架中展开对象

在MongoDB聚合框架中,我希望在对象(即JSON集合)上使用$ unwind运算符.看起来这不可能,是否有解决方法?有计划实施吗?

例如,从聚合文档中获取文章集合.假设有一个额外的字段"评级"是来自用户 - >评级的地图.你能算出每个用户的平均评分吗?

除此之外,我对聚合框架非常满意.

更新:这是每个请求的JSON集合的简化版本.我正在存储基因组数据.我不能真正使基因型成为一个数组,因为最常见的查找是获取随机人的基因型.

variants: [

    {
        name: 'variant1', 
        genotypes: {

            person1: 2,
            person2: 5,
            person3: 7,

        }
    }, 

    {
        name: 'variant2', 
        genotypes: {

            person1: 3,
            person2: 3,
            person3: 2,

        }
    }

]
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

30
推荐指数
2
解决办法
3万
查看次数

使用MongoDB更新嵌套数组

我试图更新嵌套数组中的值,但无法使其工作.

我的目标是这样的

 {
    "_id": {
        "$oid": "1"
    },
    "array1": [
        {
            "_id": "12",
            "array2": [
                  {
                      "_id": "123",
                      "answeredBy": [],
                  },
                  {
                      "_id": "124",
                      "answeredBy": [],
                  }
             ],
         }
     ]
 }
Run Code Online (Sandbox Code Playgroud)

我需要将值推送到"answersBy"数组.

在下面的例子中,我尝试将"success"字符串推送到"123 _id"对象的"answersBy"数组,但它不起作用.

callback = function(err,value){
     if(err){
         res.send(err);
     }else{
         res.send(value);
     }
};
conditions = {
    "_id": 1,
    "array1._id": 12,
    "array2._id": 123
  };
updates = {
   $push: {
     "array2.$.answeredBy": "success"
   }
};
options = {
  upsert: true
};
Model.update(conditions, updates, options, callback);
Run Code Online (Sandbox Code Playgroud)

我找到了这个链接,但它的答案只说我应该使用类似对象的结构而不是数组.这不适用于我的情况.我真的需要我的对象嵌套在数组中

如果你能在这里帮助我会很棒.我花了好几个小时来搞清楚这一点.

先感谢您!

javascript mongoose mongodb node.js mongodb-query

30
推荐指数
2
解决办法
2万
查看次数

如何使用mongoose find获取包含字符串一部分的所有值?

我有使用mongoose从MongoDB检索数据的以下问题.

这是我的架构:

const BookSchema = new Schema(
    {
        _id:Number,
        title:String,
        authors:[String],
        subjects:[String]   
    }
);
Run Code Online (Sandbox Code Playgroud)

你可以看到我在对象中嵌入了2个数组,让我们说作者的内容可以是这样的:作者:["Alex Ferguson","Didier Drogba","Cristiano Ronaldo","Alex"]
我是什么我想要实现的是获得阵列中的所有Alex.

到目前为止,我已经能够获得值,如果它们完全匹配值.但是,如果我试图获得包含Alex的那些答案总是[].

我想知道的是我如何使用find()执行此操作而不执行map-reduce来创建视图或集合,然后对其应用find().

这里的代码适用于完全匹配

Book.find( {authors:req.query.q} , function(errs, books){
            if(errs){
                res.send(errs); 
            }

            res.json(books);
        });
Run Code Online (Sandbox Code Playgroud)

我尝试了一些但没有运气{authors:{$ elemMatch:req.query.q}} {authors:{$ in:[req.query.q]}}

这个给了我一个错误,而且最重要的是我在这里发现的另一篇文章效率非常低.{$ where:this.authors.indexOf(req.query.q)!= -1}

我也试过{作者:{$ regex:"./ value/i"}}

map-reduce工作正常,我需要使用其他方法使其工作,看哪哪个更好?

任何帮助是极大的赞赏.我确信这很容易,但我是NodeJS和Mongo的新手,我无法自己解决这个问题.

regex mongodb node.js mongodb-query aggregation-framework

30
推荐指数
2
解决办法
5万
查看次数

嵌套数组的MongoDB投影

我有一个集合"帐户",其中包含类似于此结构的文档:

{
    "email" : "john.doe@acme.com",
    "groups" : [
        {
            "name" : "group1",
            "contacts" : [
                { "localId" : "c1", "address" : "some address 1" },
                { "localId" : "c2", "address" : "some address 2" },
                { "localId" : "c3", "address" : "some address 3" }
            ]
        },
        {
            "name" : "group2",
            "contacts" : [
                { "localId" : "c1", "address" : "some address 1" },
                { "localId" : "c3", "address" : "some address 3" }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

通过

q …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

30
推荐指数
2
解决办法
2万
查看次数

MongoDB嵌套查找有3个级别

我需要从数据库中检索整个单个对象层次结构作为JSON.实际上关于实现这一结果的任何其他解决方案的提议将受到高度关注.我决定使用MongoDB及其$ lookup支持.

所以我有三个系列:

派对

{ "_id" : "2", "name" : "party2" }
{ "_id" : "5", "name" : "party5" }
{ "_id" : "4", "name" : "party4" }
{ "_id" : "1", "name" : "party1" }
{ "_id" : "3", "name" : "party3" }    
Run Code Online (Sandbox Code Playgroud)

地址

{ "_id" : "a3", "street" : "Address3", "party_id" : "2" }
{ "_id" : "a6", "street" : "Address6", "party_id" : "5" }
{ "_id" : "a1", "street" : "Address1", "party_id" : "1" }
{ "_id" …
Run Code Online (Sandbox Code Playgroud)

lookup mongodb mongodb-query aggregation-framework

29
推荐指数
2
解决办法
2万
查看次数

异常:无法从BSON类型EOO转换为Date

我遇到运行以下聚合查询的问题:

db.snippets.aggregate([ { '$project': { month: { '$month': '$created_at' }} } ])
Run Code Online (Sandbox Code Playgroud)

相同的错误消息是:

assert: command failed: {
        "errmsg" : "exception: can't convert from BSON type EOO to Date",
        "code" : 16006,
        "ok" : 0 } : aggregate failed
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题.我找到了一个相关的问题

相关的Stack Overflow问题

但它并没有说明如何完成任务.

date mongoose mongodb aggregation-framework

28
推荐指数
2
解决办法
3万
查看次数

使用mongoose在MongoDB中批量upsert

有没有选择用mongoose执行批量upserts?所以基本上有一个数组并插入每个元素,如果它不存在或更新它,如果它存在?(我正在使用海关_ids)

当我使用.insert时, MongoDB会为重复键返回错误E11000(应该更新).插入多个新文档可以正常工作:

var Users = self.db.collection('Users');

Users.insert(data, function(err){
            if (err) {
                callback(err);
            }
            else {
                callback(null);
            }
        });
Run Code Online (Sandbox Code Playgroud)

使用.save会返回一个错误,该参数必须是单个文档:

Users.save(data, function(err){
   ...
}
Run Code Online (Sandbox Code Playgroud)

这个答案表明没有这样的选择,但它具体针对C#而且已经有3年了.所以我想知道是否有任何选择使用猫鼬做到这一点?

谢谢!

javascript mongoose mongodb node.js mongodb-query

27
推荐指数
4
解决办法
2万
查看次数

MongoDB聚合:计算不同的字段

我正在尝试编写一个聚合来识别使用多个支付来源的帐户.典型的数据是.

{
 account:"abc",
 vendor:"amazon",
}
 ...
{
 account:"abc",
 vendor:"overstock",
}
Run Code Online (Sandbox Code Playgroud)

现在,我想制作一个类似于此的帐户列表

{
 account:"abc",
 vendorCount:2
}
Run Code Online (Sandbox Code Playgroud)

我将如何在Mongo的聚合框架中编写它

mongodb aggregation-framework

26
推荐指数
5
解决办法
4万
查看次数