Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过Meteor从阵列中提取条目_Javascript_Mongodb_Meteor_Mongodb Query - Fatal编程技术网

Javascript 通过Meteor从阵列中提取条目

Javascript 通过Meteor从阵列中提取条目,javascript,mongodb,meteor,mongodb-query,Javascript,Mongodb,Meteor,Mongodb Query,我在Meteor 1.1.0.2应用程序中使用了以下(简化的)SimpleSchema模式: Tickers.attachSchema( 新单纯形({ 参赛作品:{ 类型:[TickerEntries], 默认值:[], 可选:true } }) ); TickerEntries=新SimpleSchema({ 身份证:{ 类型:字符串, 自动形成:{ 类型:“隐藏”, 标签:假, 只读:正确 }, 可选:true, 自动值:函数(){ 如果(!this.isSet){ 返回新的Mongo.Co

我在Meteor 1.1.0.2应用程序中使用了以下(简化的)SimpleSchema模式:

Tickers.attachSchema(
新单纯形({
参赛作品:{
类型:[TickerEntries],
默认值:[],
可选:true
}
})
);
TickerEntries=新SimpleSchema({
身份证:{
类型:字符串,
自动形成:{
类型:“隐藏”,
标签:假,
只读:正确
},
可选:true,
自动值:函数(){
如果(!this.isSet){
返回新的Mongo.Collection.ObjectID();
}
}
},
正文:{
类型:字符串,
标签:“文本”
}
};
在数据库中,我有以下条目:

{
“_id”:“ZCEVQ9VIGQ3UQQNT”,
“条目”:[
{
“文本”:“a”,
“id”:“FC29774DD7B37EE0DC5E3E”
},
{
“文本”:“b”,
“id”:“8171c4dbcc71052a8c6a38fb”
}
]
}
我想删除ID指定的entries数组中的一个条目

如果我在meteor mongodb shell中执行以下命令,它将正常工作:

db.Tickers.update({u id:“3TKgHKkGnzgfwqYHY”},{“$pull”:{“条目”:{“id:“8171c4dbcc71052a8c6a38fb”}})
但问题是,如果我要从Meteor内部执行相同的操作,它将不起作用。以下是我的代码:

Tickers.update({id:'3TKGHKGNZGFWQYHY'},{$pull:{'entries':{'id':'8171c4dbcc71052a8c6a38fb'}});
我还尝试了以下方法:

Tickers.update('3Tkghkgnzgfwqyhy',{$pull:{'entries':{'id':'8171c4dbcc71052a8c6a38fb'}});
这些命令都没有给我一个错误,但它们不会从我的文档中删除任何内容

是否有可能,
$pull
命令不受正确支持,或者我在某个地方犯了错误

提前谢谢

编辑: 我发现了这个问题,在我的描述中看不到,因为我简化了模式。在我的应用程序中,
tickertries
中有一个附加属性
timestamp

tickertries=new SimpleSchema({
身份证:{
类型:字符串,
可选:true,
自动值:函数(){
如果(!this.isSet){
返回新的Mongo.Collection.ObjectID();
}
}
},
时间戳:{
类型:日期,
标签:“分钟”,
可选:true,
自动值:函数(){
如果(!this.isSet){//这里的检查是必要的!
返回新日期();
}
}
},
正文:{
类型:字符串,
标签:“文本”
}
});
多亏了Kyll的提示,我创建了一个Meteopad并发现,
autovalue
函数导致了这些问题

我现在已将函数更改为以下代码:

autoValue:function(){
如果(!this.isSet&&this.operator!==“$pull”){//这里的检查是必要的!
返回新日期();
}
}
现在它开始工作了。看起来,在拉取项/对象的情况下返回一个autovalue值,它取消了拉取操作,因为该值没有设置为返回值(因此timestamp属性保留旧值,但不会拉取)

下面是测试它的方法(只需注释掉autovalue函数中的运算符检查):


谢谢大家的帮助,你们所有的帖子都对我很有帮助!

对于一个基本的meteor应用程序,我称之为“bunk”。如果你创建了一个全新的项目,并简单地定义了集合,那么操作员的工作就如预期的那样:

控制台:

meteor创建票据 cd票 流星赛跑 然后打开外壳并插入数据:

流星蒙戈 >db.tickets.insert(data)//正好是问题中的数据 然后只需生成一些基本代码和模板:

tickers.js

Tickers=新流星系列(“Tickers”);
if(Meteor.isClient){
Template.body.helpers({
“tickers”:函数(){
返回Tickers.find({});
}
});
}
if(Meteor.isServer){
Meteor.startup(函数(){
//启动时在服务器上运行的代码
});
}
tickers.html


股票行情
欢迎来到流星!
    {{{#每个股票行情} {{>ticker} {{/每个}}
  • {{{u id}}
      {{{#每个条目}} {{>条目} {{/每个}}
  • {{id}}-{{text}
  • 应用程序应该运行正常,因此在浏览器控制台中执行
    .update()
    (缩进以供阅读):

    Tickers.update(
    {“_id”:“zcevq9vigq3uqqnt”},
    {“$pull”:{“entries”:{“id”:“fc29774dd7b37ee0dc5e3e”}}
    )
    
    该项目从条目中删除,页面刷新时没有该项目。因此,一切都消失了,正如预期的那样

    即使添加和包,这里也没有区别:

    meteor add-aldeed:简单模式 流星添加桤木:收藏2 tickers.js

    Tickers=新流星系列(“Tickers”);
    TickerEntries=新SimpleSchema({
    “id”:{
    类型:字符串,
    可选:true,
    autoValue:function(){
    如果(!this.isSet){
    返回新的Mongo.Collection.ObjectID()
    }
    }
    },
    “文本”:{
    类型:字符串
    }
    });
    附件(
    新单纯形({
    条目:{type:[TickerEntries]}
    })
    );
    if(Meteor.isClient){
    Template.body.helpers({
    “tickers”:函数(){
    返回Tickers.find({});
    }
    });
    }
    if(Meteor.isServer){
    Meteor.startup(函数(){
    //启动时在服务器上运行的代码
    });
    }
    
    重新初始化数据并在浏览器控制台中运行相同的命令,所有内容都保持不变

    在您自己的操作或其他操作中检查此错误或任何键入错误
    arr: {
     type:Array,
     optional:true
    }
    
    Coll.update({}, {$pull: {arr: ''}}, {getAutoValues: false});