使用 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'由于某种原因被解释为文字。
当我使用 insert(docs...) 插入多个文档时,如果文档列表中存在文档中的一个重复键,则操作失败并且无法插入文档。我怎样才能忽略这个错误,这样所有文档(但不是重复项)都可以成功插入。
你们能帮我解决这个问题吗?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,但它给了我这个错误:
Error: An exception occurred within a child process:
ChecksumMismatchError: SHA256 mismatch
Expected: c7214ee7bda3cf9566e8776a8978706d9827c1b09017e17b66a5a4e0c0731e1f
Actual: 6aa2e0c348e8abeec7931dced1f85d4
Run Code Online (Sandbox Code Playgroud) 我从 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函数。任何指导将不胜感激。
{
"_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 的初学者,下面是我的示例文档:
{
"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) 代码一:
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 代码的方式。谢谢。
我正在使用蒙戈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 中的每条记录,我们仍然可以在结果中获取该记录吗?请帮我!提前致谢
在一个集合中,我有一些文档,其中一个字段等于一个数组(“类别”),其中包含另一个文档,在下面的代码中为什么我收到以下错误: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 ×9
node.js ×2
pymongo ×2
go ×1
homebrew ×1
installation ×1
javascript ×1
json ×1
mgo ×1
pymongo-3.x ×1
python ×1