小编sri*_*asy的帖子

MongoDB:使用另一个字段的值更新字段

使用 Mongo shell,我尝试添加一个与集合中所有文档的现有字段具有相同值的字段。假设我们有两个文档:

{
   'foo': 'str1'
}
Run Code Online (Sandbox Code Playgroud)

和

{
   'foo': 'str2'
}
Run Code Online (Sandbox Code Playgroud)

我想插入一个新字段'foo_new',其值分别为'foo',以便文档成为

{
   'foo': 'str1'
   'foo_new': 'str1'
}
Run Code Online (Sandbox Code Playgroud)

和

{
   'foo': 'str2'
   'foo_new': 'str2'
}
Run Code Online (Sandbox Code Playgroud)

我用来在 Mongo shell 中更新集合(例如“coll”)的命令是

db.coll.update({}, {$set: {'foo_new': '$foo'}}, {multi: true})
Run Code Online (Sandbox Code Playgroud)

运行该命令的结果是两个更新的文档

{
   'foo': 'str1'
   'foo_new': '$foo'
}
Run Code Online (Sandbox Code Playgroud)

和

{
   'foo': 'str2'
   'foo_new': '$foo'
}
Run Code Online (Sandbox Code Playgroud)

ie'$foo'由于某种原因被解释为文字。

mongodb mongodb-query

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

使用 MongoDB-mgo 插入许多文档时,如何忽略重复键错误并继续插入?

当我使用 insert(docs...) 插入多个文档时,如果文档列表中存在文档中的一个重复键,则操作失败并且无法插入文档。我怎样才能忽略这个错误,这样所有文档(但不是重复项)都可以成功插入。

go mongodb mongodb-query mgo

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

Mongodb:“数据库”对象上的“查找”方法失败,因为不存在这样的方法

你们能帮我解决这个问题吗?Client.list_databse_names()打印列表,但下一行抛出以下错误。

File "/usr/local/lib/python3.6/dist-packages/pymongo/collection.py", line 3339,
in __call__self.__name)
TypeError: 'Collection' object is not callable.
If you meant to call the 'find' method on a 'Database' object it is failing
because no such method exists.
Run Code Online (Sandbox Code Playgroud)

这是代码

import pymongo

client =pymongo.MongoClient('mongodb+srv://server:password@cluster-sre.mongodb.net/test?retryWrites=true&w=majority')
print(client.list_database_names()) // outputs : ['data', 'admin', 'local']
results = client.locations.find({"city": "Bangalore"})
print(results) 
Run Code Online (Sandbox Code Playgroud)

还尝试使用“client.locations.findOne()”相同的错误消息。

mongodb pymongo mongodb-query

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

错误:子进程中发生异常:ChecksumMismatchError:SHA256不匹配

我试图使用自制软件安装mongoDB,但它给了我这个错误:

Error: An exception occurred within a child process:
  ChecksumMismatchError: SHA256 mismatch
Expected: c7214ee7bda3cf9566e8776a8978706d9827c1b09017e17b66a5a4e0c0731e1f
  Actual: 6aa2e0c348e8abeec7931dced1f85d4
Run Code Online (Sandbox Code Playgroud)

installation homebrew mongodb

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

PyMongo:如何在 MongoDB 中批量更新巨大的 JSON 数据

我从 API 中提取 JSON 数据,输出如下:

[[{'employeeId': 1, 'lastName': 'Smith'}, {'employeeId': 2, 'lastName': 'Flores'}]]
Run Code Online (Sandbox Code Playgroud)

列表中大约有250k 个对象。我能够遍历列表中的对象并以这种方式update_one通过PyMongo执行:

json_this = json.dumps(json_list[0])
json_that = json.loads(json_this)
for x in json_that:
    collection.update_one({"employeeId": x['employeeId']},{"$set": x},upsert=True)
Run Code Online (Sandbox Code Playgroud)

但是对于25 万条记录,这需要很长时间。我正在尝试使用update_many但无法弄清楚如何正确转换/格式化此 JSON 列表以使用该update_many函数。任何指导将不胜感激。

python json mongodb pymongo

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

Mongodb聚合:投影一个没有第一个元素的数组

{
    "_id" : ObjectId("5e3179e83708dc0dcfefaf"),

    "CaseNumber" : "T978045628",

    "ServiceReferences" : [ 

        ObjectId("5e317d48bc13eaf17712a786"),

        ObjectId("5e317f0ec08d57f4a88c3444"),

        ObjectId("5e317f0ec08d57f4a88c3234")

    ]

}
Run Code Online (Sandbox Code Playgroud)

我有一个包含上述字段的集合。我想投影除第一个元素之外的“ServiceReferences”数组,因为我想跳过数组的第一个索引元素。请帮我。我尝试过几个用例,例如:

db.getCollection('cases').aggregate([{
             "$project": {

                  "ServRefs": { $pop: { ServiceReferences: -1 } }
              }
       },
       {
        $lookup: {

            from: 'services',

            localField: 'ServRefs',

            foreignField: '_id',

            as: 'serviceDoc'

        }
    }, { $unwind: '$serviceDoc' }])
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

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

MongoDB中如何根据条件从数组中获取元素?

我是 MongoDB 的初学者,下面是我的示例文档:

{
"plan_id" : "100",
"schedule_plan_list" : [ 
    {
        "date" : "01-05-2020",
        "time" : "9:00AM -10:00AM"
    }, 
    {
        "date" : "02-05-2020",
        "time" : "10:00AM -11:00AM"
    }, 
    {
        "date" : "03-05-2020",
        "time" : "9:00AM -10:00AM"
    }, 
    {
        "date" : "04-05-2020",
        "time" : "9:30AM -10:30AM"
    }, 
    {
        "date" : "05-05-2020",
        "time" : "9:00AM -10:00AM"
    }, 
    {
        "date" : "06-05-2020",
        "time" : "9:00AM -10:00AM"
    }, 
    {
        "date" : "07-05-2020",
        "time" : "9:30AM -10:30AM"
    }, 
    {
        "date" : "08-05-2020",
        "time" : "4:00PM …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework pymongo-3.x

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

obj.hasOwnProperty() 和 Object.prototype.hasOwnProperty.call() 有什么区别?

代码一:

obj.hasOwnProperty(prop);
Run Code Online (Sandbox Code Playgroud)

代码二:

const hasOwnProperty = Object.prototype;
hasOwnProperty.call(obj, prop); 
Run Code Online (Sandbox Code Playgroud)

我总是使用第一种编码风格,但我在一些 JS 书籍或 github 项目中多次看到第二种编码风格。我想知道这只是一种习惯,还是一种更好的编写 js 代码的方式。谢谢。

javascript

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

仅提取 mongodb 聚合中 $project 中键值对中的值

我正在使用蒙戈3.4

我使用的是mongodb的聚合函数。我的问题是,在 $project 中我的值为

{ $project: {
  "_id": 1,
  "name":1 ,
  ............
  ............
  "partners.address.country": 1,
  "partners.partnerName": 1,
} },
{ $match: matchCondition
}
Run Code Online (Sandbox Code Playgroud)

结果,我得到的价值为

“合作伙伴”:{“地址”:{“国家”:“”}}

我不想要我只是想要它

“合作伙伴”:{“国家”:“”}

我想跳过地址部分。另外,我不想.map在结果之后使用函数,因为$project中有大量数据。有人可以帮忙吗?

我还有一个查询,该查询是 4 个集合的联接(另外 2 个查询我在上面的示例中没有提及)。我想要我的主集合的整个记录​​和其他集合的2-3条记录,所以,我必须在$project中写入每条记录并将其设置为1。有没有一种方法可以让我们跳过写入每条记录& $project 中的每条记录,我们仍然可以在结果中获取该记录吗?请帮我!提前致谢

mongodb node.js mongodb-query aggregation-framework

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

MongoError:向数组元素添加新字段时无法识别表达式 $addFields

在一个集合中,我有一些文档,其中一个字段等于一个数组(“类别”),其中包含另一个文档,在下面的代码中为什么我收到以下错误:MongoError:无法识别的表达式 '$addFields'

dbUsers.aggregate([
        {
            $match: {
                key: req.cookies.key
            }
        }, {
            $project: {
                categories: {
                    $map: {
                        input: {
                            $filter: {
                                input: '$categories',
                                as: 'category',
                                cond: { $eq: ['$$category.parentId', req.headers.parentid] }
                            }
                        },
                        as: 'current',
                        in: {
                            $addFields: {
                                countOfIntelligence: {
                                    $size: '$$current.listOfIntelligences'
                                }
                        }}
                    }
                }
            }
        }
    ]).toArray((err, res2) => {
        if (err) {
            console.log(err)
        } else {
            res.send({
                categories: res2
            })
        }
    })
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongodb-query aggregation-framework

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