小编Bla*_*ven的帖子

$ find在数组中的ObjectId

在一个ObjectIds数组而不仅仅是一个ObjectId的字段上执行$ lookup的语法是什么?

示例订单文档:

{
  _id: ObjectId("..."),
  products: [
    ObjectId("..<Car ObjectId>.."),
    ObjectId("..<Bike ObjectId>..")
  ]
}
Run Code Online (Sandbox Code Playgroud)

不工作查询:

db.orders.aggregate([
    {
       $lookup:
         {
           from: "products",
           localField: "products",
           foreignField: "_id",
           as: "productObjects"
         }
    }
])
Run Code Online (Sandbox Code Playgroud)

期望的结果

{
  _id: ObjectId("..."),
  products: [
    ObjectId("..<Car ObjectId>.."),
    ObjectId("..<Bike ObjectId>..")
  ],
  productObjects: [
    {<Car Object>},
    {<Bike Object>}
  ],
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

86
推荐指数
5
解决办法
8万
查看次数

仅返回嵌套数组中匹配的子文档元素

主要集合是零售商,其中包含商店阵列.每个商店都包含一系列优惠(您可以在这家商店购买).这个提供的数组有一系列的大小.(见下面的例子)

现在我尝试找到所有尺寸可用的优惠L.

{
    "_id" : ObjectId("56f277b1279871c20b8b4567"),
    "stores" : [
        {
        "_id" : ObjectId("56f277b5279871c20b8b4783"),
        "offers" : [
            {
                "_id" : ObjectId("56f277b1279871c20b8b4567"),
                "size": [
                    "XS",
                    "S",
                    "M"
                ]
            },
            {
                "_id" : ObjectId("56f277b1279871c20b8b4567"),
                "size": [
                    "S",
                    "L",
                    "XL"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个查询: db.getCollection('retailers').find({'stores.offers.size': 'L'})

我期待一些像这样的输出:

 {
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"stores" : [
    {
        "_id" : ObjectId("56f277b5279871c20b8b4783"),
        "offers" : [
            {
                "_id" : ObjectId("56f277b1279871c20b8b4567"),
                "size": [
                    "S",
                    "L",
                    "XL"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的查询输出还包含与sizeXS,X和M 的不匹配的报价.

我如何强制MongoDB只返回与我的查询匹配的商品? …

mongodb mongodb-query aggregation-framework

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

Mongorestore到不同的数据库

在MongoDB中,是否可以转储数据库并将内容还原到其他数据库?例如这样:

mongodump --db db1 --out dumpdir
mongorestore --db db2 --dir dumpdir
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这是错误消息:

构建要从dumpdir目录恢复的集合列表

不知道如何处理子目录"dumpdir/db1",跳过...

DONE

mongodb mongorestore

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

检查docker hub上是否已存在image:tag组合

作为bash脚本的一部分,我想检查docker hub上是否存在特别的docker image:tag组合.此外,它将是一个私人存储库.

即伪代码如下:

tag = something
if image:tag already exists on docker hub:
    Do nothing
else
    Build and push docker image with that tag
Run Code Online (Sandbox Code Playgroud)

bash docker dockerhub

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

在mLab上连接到MongoDB数据库失败了身份验证

我有一个Parse应用程序,我正在尝试将我的应用程序的数据库迁移到mLab上的MongoDB实例.

我已经在Heroku上设置了一个Parse Server分支,我正在使用Heroku的mLab MongoDB附加组件.

我有一个名为mLab的数据库heroku_1ksph3jj,我应该可以使用以下模板连接到它:

mongodb://<dbuser>:<dbpassword>@ds047124.mlab.com:47124/heroku_1ksph3jj

但是,每次尝试都会返回:

Server returned error on SASL authentication step: Authentication failed.

我不确定要替换什么<dbuser><dbpassword>用什么.我有一个与我的数据库名称相同的数据库用户:heroku_1ksph3jjz所以我使用了它.我使用该用户的密码代替<dbpassword>.我应该在这里使用其他东西吗?

heroku database-migration mongodb mlab parse-platform

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

如何在mocha中编写一个post请求测试,用数据来测试响应是否匹配?

问题: 我如何在mocha中编写一个post请求测试,测试响应是否匹配?

响应将只是一个url字符串,因为它是第三方服务的重定向.

工作示例有效负载:

curl -H "Content-Type: application/json" -X POST -d '{"participant":{"nuid":"98ASDF988SDF89SDF89989SDF9898"}}' http://localhost:9000/api/members
Run Code Online (Sandbox Code Playgroud)

member.controller.js // post方法

// Creates a new member in the DB.
exports.create = function(req, res) {
  Member.findByIdAndUpdate(req.body.participant.nuid,
    { "$setOnInsert": { "_id": req.body.participant.nuid } },
      { "upsert": true },
      function(err,doc) {
        if (err) throw err;
        res.send({
          'redirectUrl': req.protocol + '://' + req.get('host') + '/registration/' + req.body.participant.nuid
        })
    }
  );
};
Run Code Online (Sandbox Code Playgroud)

预计res.send

 {"redirectUrl":"http://localhost:9000/registration/98ASDF988SDF89SDF89989SDF9898"}  
Run Code Online (Sandbox Code Playgroud)

工作示例GET请求测试

var should = require('should');
var app = require('../../app');
var request = require('supertest');

describe('GET /api/members', function() …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js karma-mocha

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

Moongoose聚合$ match与id不匹配

我希望按ID(56e641d4864e5b780bb992c656e65504a323ee0812e511f2)显示产品,并在扣除减价后显示价格(如果有).

我可以使用聚合计算最终价格,但这会返回集合中的所有文档,如何使其仅返回匹配ID

"_id" : ObjectId("56e641d4864e5b780bb992c6"), 
"title" : "Keyboard", 
"discount" : NumberInt(10),
"price" : NumberInt(1000)

"_id" : ObjectId("56e65504a323ee0812e511f2"), 
"title" : "Mouse", 
"discount" : NumberInt(0),
"price" : NumberInt(1000)

"_id" : ObjectId("56d90714a48d2eb40cc601a5"), 
"title" : "Speaker", 
"discount" : NumberInt(10),
"price" : NumberInt(1000)
Run Code Online (Sandbox Code Playgroud)

这是我的疑问

productModel.aggregate([
        {
            $project: {
                title   : 1,
                price: {
                    $cond: {
                        if: {$gt: ["$discount", 0]}, then: {$subtract: ["$price", {$divide: [{$multiply: ["$price", "$discount"]}, 100]}]}, else: "$price"
                    }

                }
            }
        }
    ], function(err, docs){
        if (err){
            console.log(err)
        }else{
            console.log(docs) …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query aggregation-framework

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

MongoDB-如果不存在则插入,否则跳过

是否可以在Mongo中插入条件;

//Pseudo code

Bulk Insert Item :

If Key exists
    Skip, don't throw error
If key does not exist
    Add item
Run Code Online (Sandbox Code Playgroud)

如果我执行单个插入,它可能会在集合中返回错误或插入,但是可以批量生成吗?

javascript mongoose mongodb node.js mongodb-query

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

如何在任意深度找到MongoDB字段名称

我将一些草率的XML数据导入Mongo数据库.每个Document都有嵌套的子文档,深度约为5-10.我想找到()具有特定字段特定值的文档,其中字段可能出现在子文档的任何深度(并且可能出现多次).

我目前正在将每个Document拉到Python中,然后搜索该字典,但如果我能说出一个过滤器原型,数据库只会返回其内容中某处具有特定字段名称值的文档,那就太好了.

这是一个示例文档:

{
    "foo": 1,
    "bar": 2,
    "find-this": "Yes!",
    "stuff": {
        "baz": 3,
        "gobble": [
            "wibble",
            "wobble",
            {
                "all-fall-down": 4,
                "find-this": "please find me"
            }                
        ],
        "plugh": {
            "plove": {
                "find-this": "Here too!"
            }
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

所以,我想找到具有"find-this"字段的文档,并且(如果可能的话)能够找到具有"find-this"字段的特定值的文档.

recursion mongodb mongodb-query

14
推荐指数
1
解决办法
6526
查看次数

如何使用es6样式导入导入MongoDB?

希望这是一个简单的问题.我正在尝试使用es6 import-from样式导入MongoDB.如果我导入使用节点要求它工作正常.

let mongo = require('mongodb');
let MongoClient = mongo.MongoClient;
Run Code Online (Sandbox Code Playgroud)

但是,如果我以es6方式导入它,它会在没有错误或日志的情况下中断.

import {MongoClient} from 'mongodb';
Run Code Online (Sandbox Code Playgroud)

但是在编译/运行时它不会中断它只会在我尝试使用MongoClient执行任何操作时中断.

这是我的Db Manager课程 -

import {MongoClient} from 'mongodb';

export class DbManager {

  constructor() {
    console.log('Constructing DB Connection');
  }

}
Run Code Online (Sandbox Code Playgroud)

当我运行我的服务器时,我从其他管理器和事件中获取了几个日志.

mycomputer myuser$ ./start.sh
Server Constructing
Route Manager Constructing
Initializing Route: Static
Constructing DB Connection
http server started on port: 8000
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行MongoClient的console.log,则根本没有输出.

import {MongoClient} from 'mongodb';

export class DbManager {

  constructor() {
    console.log('Constructing DB Connection');
    console.log(MongoClient);
  }

}
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样 -

mycomputer myuser$ ./start.sh
mycomputer myuser$
Run Code Online (Sandbox Code Playgroud)

没有编译错误,所以我不明白为什么这不起作用.此外,我不明白为什么没有任何日志!这是最后发生的事情之一,至少应该记录,直到我想到这一点.如果你想 …

javascript mongodb node.js ecmascript-6 systemjs

14
推荐指数
3
解决办法
5050
查看次数