Mongodb MongoError:虚线区域。。对存储无效
我试图用以下查询更新具有匹配嵌套属性的文档Mongodb MongoError:虚线区域。。对存储无效,mongodb,meteor,schema,Mongodb,Meteor,Schema,我试图用以下查询更新具有匹配嵌套属性的文档 upsertByCommentThreadId: function(commentThread) { return CommentThreads.update({ 'youtube.commentThreadId': commentThread.youtube.commentThreadId }, { $set: commentThread }, {
upsertByCommentThreadId: function(commentThread) {
return CommentThreads.update({
'youtube.commentThreadId': commentThread.youtube.commentThreadId
},
{
$set: commentThread
},
{
upsert: true
}
);
}
模式:
Schema({
youtube: {
type: Object
},
'youtube.etag': {
type: String
},
'youtube.commentThreadId': {
type: String,
index: 1
},
...
但我犯了个错误
Exception while invoking method ... MongoError: The dotted field 'youtube.commentThreadId' in 'youtube.commentThreadId' is not valid for storage.
我不知道如何查询嵌套属性,如果不是通过点表示法,您需要展平您的
$set
运算符参数:
schema.update( {
'youtube.commentThreadId': commentThread.youtube.commentThreadId
},
{
$set: {
// Here is my change
'youtube.commentThreadId': commentThread.youtube.commentThreadId
}
},
{ /* opts */});
您没有显示commentThread
(该upsertByCommentThreadId()
函数的输入参数-但从查询部分判断,我怀疑您正在发送对象。例如:
let commentThread = {
youtube: {
commentThreadId: 12345
}
};
所以您的查询部分是可以的,但是$set
需要一个简单的key:value,其中key必须是字符串
因此,您发送的内容如下:
CommentThreads.update({
// Here it's ok, as it's translated to:
// { 'youtube.commentThreadId': 12345 }
'youtube.commentThreadId': commentThread.youtube.commentThreadId
},
{
// but this gets expanded to a deeply nested object, like:
// { $set: { youtube: {commentThreadId: 12345}}}
$set: commentThread
},
{/* opts */}
);
因此,您的
$set
运算符需要一个简单的{key:value}
,其中key
是一个字符串。发生错误的原因是,当键中存在点时,MongoDB无法工作。类似的错误
MongoError: The dotted field '2016.11.14' in 'myData.days.2016.11.14' is
not valid for storage.
当代码为:
day = "2016.11.14"
myData.days[ day ] = 11
当数据更改为
day = "2016_11_14"
问题已经解决。这是mongo 3.6之前对字段名的限制,现在您可以将mongo server更新到3.6或更高版本来解决此问题
如果要查询嵌套属性,则架构应该是这样的:
Schema({
youtube: {
etag:String,
commentThreadId : {
type: String,
index: 1
}
},
...
然后你可以使用youtube.commentThreadId:“something”来查询嵌套属性。我也遇到了类似的问题,将mongo版本从3.2升级到了4.2,现在看起来工作正常 您可以按照centos machine的以下步骤升级mongodb版本:- 首先,您需要创建一个存储库/etc/yum.repos.d/mongodb-org-4.2.repo文件,以便yum知道在哪里可以找到最新的mongodb包 请使用适合您的发行版和版本的代码名替换redhat/7,如下所示: 将以下内容放入您创建的回购文件中:-
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
现在,您只需发出以下命令即可安装最新版本的MongoDB:
$sudo yum安装-y mongodb org
现在,您可以通过运行以下命令来验证版本:-
mongo
commentThread是否包含整个文档,包括_id?$set将某个字段的值替换为特定值,如果要替换整个文档,请选中中的“替换文档”部分。是否找到解决方法?有相同的问题。Meteor 1.2似乎也有一个值。或者替换为.;