我正在使用Parse Dashboard进行iOS应用程序的用户管理.此外,我正在使用使用MongoDB数据库的外部API.
我目前面临的问题是从Parse Dashboard创建的用户具有较小的id而不是MongoDB的ObjectID,而其他未解析的资源则由普通的ObjectID生成.
例如.用户对象:
{
_id:"qVnyrGynJE",
user_name:"Aditya Raval"
}
Run Code Online (Sandbox Code Playgroud)
文件对象:
{
_id:"507f191e810c19729de860ea",
doc_name:"Marksheet",
user:"qVnyrGynJE"
}
Run Code Online (Sandbox Code Playgroud)
任务对象:
{
_id:"507f191e810c19729de860ea",
task_name:"Marksheet",
user:"qVnyrGynJE"
}
Run Code Online (Sandbox Code Playgroud)
我也使用Keystone.js作为后端管理仪表板.所以基本上由于这种混合类型的KeyStone.js中的ID关系被破坏而Keystone.js崩溃了.
因此,我想通过修复Keystone.js将所有现有的小ID迁移到普通的MongoDB ObjectID,而不会破坏关系或任何其他演练.
这个问题可能看起来像以前被问过很多次,但我不确定我是否正确地汇总了答案.所以这里.
Apple(WWDC 2012 Session 214)将ObjectID描述为上下文安全的线程安全的.所以我花了一些时间来转换我的代码以利用它.但是,它看起来并不像上下文一样安全,因为这里 讨论的核心数据:子上下文是否会为新插入的对象获取永久的objectID?在其他地方,存在称为永久ID的东西.
关于这个永久性ID业务,我查看了NSManagedObjectContext.h:
/* Converts the object IDs of the specified objects to permanent IDs. This implementation
will convert the object ID of each managed object in the specified array to a permanent
ID. Any object in the target array with a permanent ID will be ignored; additionally,
any managed object in the array not already assigned to a store will be assigned, based on
the same rules Core Data uses for assignment …Run Code Online (Sandbox Code Playgroud) 我在MongoDB中有一个文档,我想得到这个文档的ObjectId,但到目前为止我还没有找到一个对我这样做的方法.
查询示例:
user= db.users.find({userName:"Andressa"})
Run Code Online (Sandbox Code Playgroud)
这返回:
{ "_id" : ObjectId("53b1c579bdf3de74f76bdac9"), "userid" : 0, "userName" : "Andressa", "userEmail" : "dessa_beca@hotmail.com", "teams" : [ 1, 2, 3 ] }
Run Code Online (Sandbox Code Playgroud)
我想让ObjectId做另一个查询.
例:
userID = `user._id();` //but this does not work, of course, its an example
Run Code Online (Sandbox Code Playgroud)
所以,我可以使用ObjectId来执行另一个查询,如下所示:
userFind = db.users.find({_id: userID})
Run Code Online (Sandbox Code Playgroud)
更新:此代码:
db.teams.find({_id:{$in: user.teams}})
Run Code Online (Sandbox Code Playgroud)
返回此错误:
error: {
"$err" : "Can't canonicalize query: BadValue $in needs an array",
"code" : 17287
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
我知道这个问题可能与此问题重复.但到目前为止还没有得到满意的答案.我真的想引起一些关注,尽快找到解决方案.所以我请求你不要关闭这个问题,除非你有解决方案并在前一个问题中回答:-)
我将描述说服的问题:
我有一个存储在mongodb中的数据结构,众所周知,_idmongodb是一个bson.ObjectId类型,我可以用这样的方式检索它:
type Data struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Content string `bson:"content"`
}
Run Code Online (Sandbox Code Playgroud)
然后我Data通过查找特定的查询条件得到了一片,并使用该片段http/template来渲染前端视图.为了操作切片中的每个项目,我想使用该Id字段,但在使用时:
{{range $key, $value := .DataSlice}}
<td>{{$value.Id}}</td>
{{end}}
Run Code Online (Sandbox Code Playgroud)
那只是给出了一种类似的字符串ObjectIdHex("550146d1b51bc1c208d1924d")而不是550146d1b51bc1c208d1924d哪种字符串很好且易于使用.
在重复的问题.操作人员说,他找到了一种解决方法,通过"添加Id_String"原始数据结构来解决这个问题.但我真的不知道该怎么做?这是指在检索后分配它吗?由于我使用切片来存储检索到的数据,因此切片中的数据无法轻易更改.这样做比使用jquery做前端的工作要复杂得多.但这样做只会让我心爱的Go: - (.
那么还有更好的方法吗?
是否有可能以编程方式获取对象id,这可以在eclipse的调试工具提示中看到?

我试图通过ObjectId找到它来更新MongoDB中的文档.工作流程如下(这是针对博客).
第1步和第2步工作正常,但第3步似乎不起作用.它重定向到我需要它的页面.但数据库尚未更新.它与以前的价值相同.
以下是更新帖子部分的相关代码:
app.js
app.post "/office/post/:id/update", ensureAuthenticated, routes.updatePost
Run Code Online (Sandbox Code Playgroud)
路线/ index.js
mongoose = require 'mongoose'
ObjectId = mongoose.Types.ObjectId
Post = require '../models/Post'
...
updatePost: function(req, res) {
var o_id, the_id;
the_id = req.params.id;
console.log(the_id); // 510e05114e2fd6ce61000001
o_id = ObjectId.fromString(the_id);
console.log(o_id); // 510e05114e2fd6ce61000001
return Post.update({
"_id": ObjectId.fromString(the_id)
}, {
"title": "CHANGE"
}, res.redirect("/office/edit/posts"));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Express和Mongoose.
如果有帮助,这也是帖子模型:
(function() {
var Post, Schema, mongoose;
mongoose = require('mongoose');
Schema = mongoose.Schema;
Post = new Schema({
title: String,
subhead: String,
body: String,
publish_date: …Run Code Online (Sandbox Code Playgroud) 当我将它输入我的consol时,它可以工作:
db.posts.find({"_id": {$lt:ObjectId("55732dccf58c555b6d3f1c5a")}}).limit(5).sort({"_id":-1})
Run Code Online (Sandbox Code Playgroud)
当我使用mongotemplate时,它不起作用并返回一个空白数组:
@RequestMapping(value="/next", method=RequestMethod.GET)
public List getNextPost(@RequestParam String next) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").lt("55732dccf58c555b6d3f1c5a"));
List<Posts> posts = template.find(query, Posts.class);
return posts;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用此查询,它可以工作,但只返回与id相关的特定条目:
query.addCriteria(Criteria.where("_id").is("55732dccf58c555b6d3f1c5a"));
Run Code Online (Sandbox Code Playgroud)
我也试过Basic Query并做了这个,它也返回一个空白数组:
BasicQuery query1 = new BasicQuery("{'_id': {$lt:'ObjectId(\"55732dccf58c555b6d3f1c5a\")'}}).limit(5).sort({'_id':-1}");
Run Code Online (Sandbox Code Playgroud)
我很难过.如何在数据库中返回某个Mongo ObjectID下面的所有文档?
当我通过 API 请求从前端向后端发送数据时,出现以下错误:
在 mongoose 中,如果没有“new”,则无法调用类构造函数 ObjectId,
我尝试转换为字符串和整数,但没有成功......
我正在尝试将 MongoDB 记录解析为 pydantic 模型,但未能这样做 ObjectId
据我了解,我需要为 ObjectId 设置验证器,并尝试扩展 ObjectId 类并validator使用 ObjectId将装饰器添加到我的类中。我做了如下。
from pydantic import BaseModel, validator
from bson.objectid import ObjectId
class ObjectId(ObjectId):
pass
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if not isinstance(v, ObjectId):
raise TypeError('ObjectId required')
return str(v)
class User(BaseModel):
who: ObjectId
class User1(BaseModel):
who: ObjectId
@validator('who')
def validate(cls, v):
if not isinstance(v, ObjectId):
raise TypeError('ObjectId required')
return str(v)
data = {"who":ObjectId('123456781234567812345678')}
Run Code Online (Sandbox Code Playgroud)
不幸的是,两个“解决方案”都失败了,如下所示:
>>> test = User(**data)
Traceback (most recent call last):
File "<stdin>", …Run Code Online (Sandbox Code Playgroud) 好吧,如果我没有多大意义,请原谅我。'ObjectId' object is not iterable每当我运行这些collections.find()功能时,我都会遇到这种情况。通过这里的答案,我不知道从哪里开始。我是编程新手,请多多包涵。
每次我到达应该从 Mongodb 获取数据的路线时,我都会得到ValueError: [TypeError("'ObjectId' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')].
帮助
objectid ×10
mongodb ×6
node.js ×3
mongoose ×2
python ×2
api ×1
core-data ×1
debugging ×1
eclipse ×1
express ×1
go ×1
ios ×1
keystonejs ×1
mgo ×1
nosql ×1
objective-c ×1
parse-server ×1
parsing ×1
pydantic ×1
spring-data ×1