小编Bla*_*ven的帖子

用pymongo和flask插入数据

当我单击提交按钮时,出现错误提示:

“ TypeError:'Collection'对象不可调用。如果您打算在'Database'对象上调用'insert'方法,则该方法将失败,因为不存在这样的方法。”

这是我的signin.py代码:

from flask import Flask, request, render_template
from pymongo import MongoClient

@app = Flask(__name__)
connection = MongoClient()
db = connection.project #database name.
collection = connection.signup # collection name.

@app.route('/signin/')
def index_show():
     return render_template('signin.html')

@app.route('/signin/', methods = ['POST'])
def signup_form():
   username = request.form['user']
   passowrd = request.form['pass']
   collection.insert({'user': username, 'passoword': passowrd})

if __name__ == '__main__':
   app.run(debug = True)
Run Code Online (Sandbox Code Playgroud)

我的html文件代码在这里:

  <!DOCTYPE html>
 <html>
  <head>
    <title></title>
  </head>
  <body>
     <form method="post" action=".">
       <input type="text" name="user" /><br/><br/>
       <input type="password" name="pass" /><br/><br/>
       <input type="submit" …
Run Code Online (Sandbox Code Playgroud)

python mongodb flask pymongo-3.x

2
推荐指数
1
解决办法
5599
查看次数

按值mongodb排序项目

我想通过在其他项之前放置具有特定值的项来对集合进行排序.

例如,我希望所有项目"getthisfirst": "yes"都在其他所有项目之前.

{"getthisfirst": "yes"}
{"getthisfirst": "yes"}
{"getthisfirst": "no"}
{"getthisfirst": "maybe"}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

2
推荐指数
1
解决办法
775
查看次数

基于多个查询字段的MongoDB聚合计数 - (多字段计数)

我的收藏会看起来像,

{
    "_id" : ObjectId("55c8bd1d85b83e06dc54c0eb"),
    "name" : "xxx",
    "salary" : 10000,
    "type" : "type1"
}
{
    "_id" : ObjectId("55c8bd1d85b83e06dc54c0eb"),
    "name" : "aaa",
    "salary" : 10000,
    "type" : "type2"
}
{
    "_id" : ObjectId("55c8bd1d85b83e06dc54c0eb"),
    "name" : "ccc",
    "salary" : 10000,
    "type" : "type2"
}
Run Code Online (Sandbox Code Playgroud)

我的查询参数将会出现,

{salary = 10000,type = type2}

所以基于查询我需要获取上述查询参数的计数

结果应该是这样的,

{category:'type1',count:500} {category:'type2',count:200} {category:'name',count:100}

现在我通过点击三个不同的查询并构造结果(或)服务器端迭代来获得计数,我可以得到结果.

任何人都可以建议或提供我获得上述结果的好方法

mapreduce mongodb mongodb-query aggregation-framework

2
推荐指数
1
解决办法
2017
查看次数

如何使用NodeJS执行批量插入mongodb

我必须使用nodejs在mongodb中插入大约10,00000个文档.

我正在使用for循环生成这些文档,然后将它们存储到数组中,最后将它们插入到mongodb中.

var codeArray = new Array();
for (var i = 0; i<1000000; i++){
    var token = strNpm.generate();
    var now = moment().format('YYYYMMDD hhmmss');
    var doc1 = {id:token,
        Discount_strId:"pending",
        Promotion_strCode:token,
        Promotion_strStatus:"I",
        Promotion_dtmGeneratedDate:now,
        User_strLogin:"test",
        Promotion_strMode:"S",
        Promotion_dtmValidFrom:"pending",
        Promotion_dtmValidTill:"pending",
        LastModified_dtmStamp:now
    };
    codeArray.push(doc1);
    db.collection('ClPromoCodeMaster').insert(codeArray, function (err, result) {
    if (err){
        console.log(err);
    }else{
        console.log('Inserted Records - ', result.ops.length);
    }
});
Run Code Online (Sandbox Code Playgroud)

我面临的问题是mongo的插入限制是16mb,所以我不能一次插入整个数组.请建议最佳解决方案.

mongodb node.js mongodb-query

2
推荐指数
1
解决办法
1282
查看次数

Mongoose - 根据分数或权重在三个字段中搜索文本

我在 MongoDB 之上使用 Mongoose。这就是我的模型的外观。

var BookSchema = new Schema({
  name: String,
  viewCount: { type: Number, default: 0 },
  description: {
    type: String,
    default: 'No description'
  },
  body: {
    type: String,
    default: ''
  }
    }
});
Run Code Online (Sandbox Code Playgroud)

我需要在多个Name, Description, Body字段上搜索一些文本。到目前为止,这就是我正在做的事情及其工作:

Book.find().or([{ 'name': { $regex: term, $options: "$i" }}, { 'description': { $regex: term, $options: "$i" }}, { 'body': { $regex: term, $options: "$i" }}]).exec(
    function (err, topics) {
      if (err) {
        return handleError(res, err);
      }
      return res.status(200).json(books);
    });
Run Code Online (Sandbox Code Playgroud)

问题:我需要想出一些机制,将权重/分数分配给权重最高的所有字段 …

mongoose mongodb node.js mongodb-query

2
推荐指数
1
解决办法
2851
查看次数

MongoDb,查询最后一个,然后分组

我在处理MongoDb时遇到了麻烦.

我需要 :

  • 获取所有最后的条目
  • 关于一个领域
  • 喜欢:SELECT MAX(id),foreignKey FROM t_table GROUP BY foreignKey

我知道我们可以使用$ last和mongodb,但我根本不知道如何继续.

我试过了 :

db.collection.aggregate(
   [
     {
       $group:
         {
           _id: "$zone._id",
           lastRegistered: { $last: "$_id" }
         }
     }
   ]
)
Run Code Online (Sandbox Code Playgroud)

但它似乎没有给我我需要的东西

用例子编辑

根据这三个:

  { _id: 55d5a01f9f58d2cc0eb79f5d,
    controlDate: Thu Aug 20 2015 11:38:40 GMT+0200 (Paris, Madrid (heure d’été)),
    zone:
     { _id: 55cb5bb42d191d2022c5c266,
       zoneName: 'Syphon 1',
     },
    actif: true 
    },



  { _id: 55d59f129f58d2cc0eb79f5c,
    controlDate: Fri Aug 21 2015 07:34:12 GMT+0200 (Paris, Madrid (heure d’été)),
    zone:
     { _id: 55cb5bb42d191d2022c5c266,
       zoneName: 'Syphon …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

仅在mongoose中的填充数组中删除文档objectid

我正在尝试使用填充查询从数组中删除objectids时非常困难.

这是我的架构

var userSchema = new Schema({
  username: String,
  password: String,
  books: [{type: Schema.Types.ObjectId, ref: 'Book'}]
  }
);

var bookSchema = new Schema({
  bookid: {type:String, unique:true, required:true},
  imgURL: String,
  fortrade: Boolean
});
Run Code Online (Sandbox Code Playgroud)

问题出在下面显示的查询中.当我只想删除books数组中的objectid时,它会删除删除书架构项.

users.findOne({'_id':userid}).populate('books').exec(function(usererr,userdata){
        if (usererr) return console.error(usererr);

        userdata.books.forEach(function(elm,idx){
            if(elm.bookid==_book.bookid){
                userdata.books[idx].remove();
            }
        })
    });
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongodb-query

2
推荐指数
1
解决办法
2032
查看次数

如何删除 Mongodb / Golang 中的数组项?

我有以下数据结构,我试图从“艺术家”数组中删除一个项目。

[
    {
        "id": "56b26eeb4a876400011369e9",
        "name": "Ewan Valentine",
        "email": "ewan@test.com",
        "artists": [
            "56b26f334a876400011369ea",
            "56b2702881318d0001dd1441",
            "56b2746fdf1d7e0001faaa92",
        ],
        "user_location": "Manchester, UK"
    }
]
Run Code Online (Sandbox Code Playgroud)

这是我的功能...

// Remove artist from user
func (repo *UserRepo) RemoveArtist(userId string, artistId string) error {
    change := bson.M{"artists": bson.M{"$pull": bson.ObjectIdHex(artistId)}}
    fmt.Println(userId)
    err := repo.collection.UpdateId(bson.ObjectIdHex(userId), change)
    return err
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

{
  "_message": {
    "Err": "The dollar ($) prefixed field '$pull' in 'artists.$pull' is not valid for storage.",
    "Code": 52,
    "N": 0,
    "Waited": 0,
    "FSyncFiles": 0,
    "WTimeout": false,
    "UpdatedExisting": false,
    "UpsertedId": …
Run Code Online (Sandbox Code Playgroud)

go mongodb mongodb-query mgo

2
推荐指数
1
解决办法
2755
查看次数

部分备份/恢复集合

我目前正在使用 AWS EC2 服务器,并且抓取了一些存储在 MongoDB 集合中的数据。这是我的数据库中唯一的集合。

现在我需要将此集合传输到我的本地计算机上进行处理。我的问题是远程计算机上的剩余磁盘空间不足以转储整个集合。空间可容纳约 60% 的藏品。我尝试使用db.copy()主机db.export()名直接在本地计算机上进行复制,但它不起作用,因为我不在本地网络上,而且即使使用 ssh 隧道,也存在一些身份验证问题。

我想做的是将我的大集合分成 2 个较小的集合并转储每个集合。是否可以?

谢谢你!

amazon-ec2 mongodb

2
推荐指数
1
解决办法
2177
查看次数

嵌套对象上的点表示法不在Mongoose模式中

我有一个带有providerData对象的mongoose模式:

... , providerData: {}, ...
Run Code Online (Sandbox Code Playgroud)

我想根据对象中providerData对象的ID查询文档.

所以我假设我必须像这样使用点符号:

    User.findOne({ providerIDString: providerID }, function(err, user) {...});
Run Code Online (Sandbox Code Playgroud)

哪里

    providerIDString is a string like 'providerData.facebook.id'
    providerID is the providerData.facebook id
Run Code Online (Sandbox Code Playgroud)

但是,即使查询仍然没有返回结果

db.users.find({"providerData.facebook.id":"THEFACEBOOKID"})
Run Code Online (Sandbox Code Playgroud)

在mongodb shell中返回正确的文档

我是否正确地假设这种情况正在发生,因为providerData.facebook并且providerData.facebook.id未在用户模式中定义?

这是否意味着我必须将它们添加到模式中,或者有没有办法在不在mongoose模式中的嵌套对象上使用点表示法?

javascript mongoose mongodb node.js mongodb-query

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